2016-03-08 174 views
0

我試圖將查詢轉換爲貨幣格式時遇到問題。以下是代碼,我試圖在「購買」金額上進行轉換時,收到兩條不同的錯誤消息。SQL貨幣格式化

使用:

sum(case 
when trandate between '2015-01-01' and '2015-03-31' 
    then format(purchases, 'C', 'en-US') 
else 0 end) as q1 

我得到102

當使用錯誤信息:

sum(case 
when trandate between '2015-01-01' and '2015-03-31' 
    then ('$' + CONVERT(varchar(12), purchases, 1)) 
else 0 end) as 'Q1 2015' 

我遇到錯誤信息245

我似乎無法找到一個解決方案也可以。當僅僅在行級別查詢數據並使用這兩種格式時,我會返回$ xxx。任何幫助將不勝感激。

乾杯

+1

您正在使用哪種SQL變體? –

+0

你的RDBMS是什麼? –

+0

MSSQL Standard 2014 – Mesa

回答

1

使用CASE表達時,結果表達數據類型將被從一個在上述情況下表達式轉換爲另一種,以相同的數據類型

case when trandate between '2015-01-01' and '2015-03-31' 
    then format(purchases, 'C', 'en-US') 
    else 0 
    end 

,必須在2個不同的數據類型結果。一個是STRING,另一個是INTEGER。 SQL Server將把字符串轉換爲整數。它無法並拋出該錯誤。

您應該在顯示結果的前端應用程序中執行值的格式設置。

如果你真的不得不這樣做在T-SQL中,否則更改爲 '0'

else '0' 

編輯1:

有您的SUM(),你應該後轉換SUM之前沒有。否則,您將在字符串上應用SUM(),這也不起作用。

format (
     SUM (case when trandate between '2015-01-01' and '2015-03-31' 
        then purchases -- format(purchases, 'C', 'en-US') 
        else 0 
        end) , 'C', 'en-US') 
+0

我在腳本中使用了其他'0'當'2015-01-01'和'2015-03-31' 然後格式(購買,'C','en-US')其他0 結束 – Mesa

+0

哦...注意你有SUM()。 。 。我會提高這個職位 – Squirrel

+0

完美,這就是我一直在尋找的。謝謝! – Mesa