比较SQLServer中的Money和Decimal(13,4)列?

时间:2011-06-29 14:09:29

标签: sql sql-server sql-server-2005 sql-server-2008

我在2个表中有2个不同的列,一个在table1中使用Money数据类型,另一个在table2中使用Decimal(13,4)。我需要对table2中的值求和并将其与table1(HAmount)中的值进行比较。 但是我找到了如下的值,请建议如何比较。

Table1
HAmount
120.4500

Table2
DAmount
60.2285 
60.2200

IF(HAmount=SUM(DAmount))
BEGIN
    Success
END
ELSE
    Failed

3 个答案:

答案 0 :(得分:3)

只需将所有内容转换为DECIMAL (13,2)

即可

IF(CAST(HAmount as DECIMAL(13,2) = SUM(CAST(DAmount as DECIMAL(13,2)))

使用默认的舍入设置,这可以为您提供所需的输出,而不必考虑未显示的“幕后”小数。

答案 1 :(得分:0)

请参阅此Microsoft page的转化/演员图表。它说Decimal和Money之间存在隐式转换。

您可以考虑使用BETWEEN关键字来帮助您获得小数便士。

答案 2 :(得分:0)

这两种数据类型[money和decimal(13,40)]都可以精确地存储带有四个小数位的值。可能会显示或不显示完整值,具体取决于您选择的SSMS或用户界面的配置方式,但它们在那里。 “120.45”的货币价值实际上可能是120.4485,显示屏正在为您量身定做。如果没有,并且如果两个值应该加起来那么,那么你似乎已经以某种方式结束了腐败数据......这是一个不同的,更严重的问题。


要在T-SQL中舍入数字函数,请使用ROUND函数。这是一个简单的例子:

declare
  @Foo1 money
 ,@foo2 decimal(13,4)

set @Foo1 = 66.2285
set @Foo2 = 66.2285

print @foo1
print str(@foo1, 7,4) + '  ("true value" of the money value)'
print @foo2

print ''
print round(@foo1,2)
print str(round(@foo1,2), 7,4) + '  ("true value" of the ROUNDED money value)'
print round(@foo2,2)

你在处理不精确的价值时要非常谨慎(即需要四舍五入),特别是当你处理钱时!