sql-server – SQL Server 2008:如何将输出格式化为货币

前端之家收集整理的这篇文章主要介绍了sql-server – SQL Server 2008:如何将输出格式化为货币前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个查询字符串,它返回一个有几个小数位的值.我想将其格式化为123.45美元.

这是查询

SELECT COALESCE(SUM(SUBTOTAL),0) 
FROM dbo.SALESORD_HDR 
where ORDERDATE = datediff(d,getdate()) 
and STATUS NOT IN (3,6)

我希望结果以2位小数的货币.

解决方法

如果您正在寻找“真正的”货币格式,类似于通过sql Server 2012中启动的 FORMAT功能可以实现的格式,那么您可以通过sqlCLR实现完全相同的功能.你可以自己编写简单的.ToString(“C”[,可选的文化信息]),或者你可以下载 SQL#库(我写的,但这个函数是免费版本)并使用它就像T- sql FORMAT函数.

例如:

SELECT sql#.Math_FormatDecimal(123.456,N'C',N'en-us');

输出

$123.46

SELECT sql#.Math_FormatDecimal(123.456,N'fr-fr');

输出

123,46 €

方法适用于sql Server 2005/2008/2008 R2.而且,如果/当您升级到较新版本的sql Server时,您可以选择通过将sql#.Math_FormatDecimal更改为FORMAT来轻松切换到本机T-sql函数.

将其放入原始问题的查询上下文中:

SELECT sql#.Math_FormatDecimal(COALESCE(SUM(SUBTOTAL),0),N'en-us') AS [Total]
FROM dbo.SALESORD_HDR 
where ORDERDATE = datediff(d,6)

编辑:

或者,因为似乎只需要en-us格式,所以有一个简单的快捷方式:使用CONVERT函数从MONEY或SMALLMONEY数据类型转换为en-us减去货币的“样式”符号,但这很容易添加

SELECT '$' + CONVERT(VARCHAR(50),CONVERT(MONEY,COALESCE(SUM(SUBTOTAL),0)),1) AS [Total]
FROM dbo.SALESORD_HDR 
where ORDERDATE = datediff(d,6)

由于SUBTOTAL字段的源数据类型是FLOAT,因此首先需要将其转换为MONEY,然后转换为VARCHAR.但是,可选的“样式”是我更喜欢CONVERT而不是CAST的一个原因.

猜你在找的MsSQL相关文章