2011-06-29 35 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

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