SQL 货币格式

SQL Currency Formatting

我 运行 在尝试将我的查询转换为货币格式时遇到了问题。下面是代码,当我尝试对 'purchases' 总和进行转换时,我总是以两条不同的错误消息结束。

使用时:

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 返回。任何帮助将不胜感激。

干杯

当使用 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 服务器会将字符串转换为整数。它无法做到并抛出该错误。

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

如果您真的必须在 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')