2011-06-29 62 views
0

我在2个表中有2个不同的列,其中一个在Table1中有Money数据类型,另一个在Table2中有Decimal(13,4)。我需要对table2中的值进行求和并将其与table1(HAmount)中的值进行比较。 但是,我发现像下面这样的值,请建议如何比较这一点。在SQLServer中比较Money和Decimal(13,4)列?

Table1 
HAmount 
120.4500 

Table2 
DAmount 
60.2285 
60.2200 

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

请澄清你想要什么。你是否希望将“十进制(13,4)”值舍入并视为“货币”? – JNK

+0

是的,如何舍入和合并 – Simhadri

回答

3

只是一切都转换为DECIMAL (13,2)

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

在默认设置四舍五入这应该给你所需要的输出,而无需再因子“幕后的”不显示的小数。

0

请参阅此Microsoft page的转换/投射表。它表示Decimal和Money之间存在隐式转换。

您可能会考虑使用BETWEEN关键字来帮助您分数钱。

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) 

你想不精确值工作时(即四舍五入是必需的),特别是当你与金钱打交道要十分小心!

+0

如何关闭120.4485到120.45 – Simhadri

+0

用舍入示例更新了我的答案 –