我在尝试将查询转换为货币格式时遇到问题。下面是代码,当我尝试对“购买”总和进行转换时,我总是遇到两个不同的错误消息。
使用时:
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 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')
关于SQL 货币格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35857125/