SQL 货币格式

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

干杯

最佳答案

使用 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/

相关文章:

java - 结果集关闭后,我收到“操作不允许”消息

java - 在 Windows 服务器上运行的 Java 应用程序能否通过 Windows 身份验证连接到 SQL Server

c# - 有没有办法捕获脚本在使用 SqlCommand 时生成的数据库消息?

ruby - 将 JSON 字符串 append 到 Ruby 中已包含 JSON 的文件

java - HTML/CSS 为什么版权标志没有被正确解释?

c - 如何读取这种格式

php - 优化这个 mysql php 查询

sql - 尝试在没有动态 SQL (sql server) 的情况下完成

SQL-临时表 : Storing all columns in temp table versus only Primary key

sql - 基于变量组合的标志