SQL货币格式

时间:2016-03-08 01:06:15

标签: sql sql-server formatting currency

我在尝试将查询转换为货币格式时遇到了问题。下面是代码,在尝试转换“购买”时,我最后会收到两条不同的错误消息。总和。

使用时:

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 个答案:

答案 0 :(得分:2)

使用CASE表达式时,结果表达式数据类型将从一个转换为另一个数据类型

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

在上面的case表达式中,结果中有2种不同的数据类型。一个是STRING,另一个是INTEGER。 SQL Server将字符串转换为整数。它无法解决这个错误。

您应该在前端应用程序中执行值的格式设置,以显示结果。

如果您真的必须在T-SQL中执行此操作,请将else更改为“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')