SQL Server中如何给[Total Ex GST]字段添加$符号?
给SQL Server查询结果的[Total Ex GST]字段添加$符号的解决办法
我明白你想给金额字段前面加上$符号的需求,之前直接用'$' + CONVERT(varchar(20)...没成功,大概率是因为CONVERT语法不完整,而且没有正确处理数值转字符串的步骤。先看看你的原查询代码:
SELECT CONVERT(varchar, DATEADD(dd, - 1, GETDATE()), 103) AS Date, 'Sales Orders' AS Type, COUNT(dbo.SalesOrder.SalesOrderID) AS Orders, SUM(dbo.SalesOrderDetails.QtyOrdered) AS Chairs, ISNULL(ROUND(SUM(dbo.SalesOrderDetails.ExtendedPrice), 2), 0) AS [Total Ex GST] FROM dbo.SalesOrder LEFT OUTER JOIN dbo.SalesOrderDetails ON dbo.SalesOrder.SalesOrderID = dbo.SalesOrderDetails.SalesOrderID WHERE (dbo.SalesOrder.EntryDate >= CONVERT(char(8), DATEADD(dd, - 1, GETDATE()), 112)) AND (dbo.SalesOrder.EntryDate < CONVERT(char(8), GETDATE(), 112)) AND (dbo.SalesOrder.CustomerID <> 187)
这里有两种靠谱的解决办法:
方法1:完善字符串拼接写法
你需要把求和并处理后的数值完整转换成字符串,再和$符号拼接,修改[Total Ex GST]这一行即可:
'$' + CONVERT(varchar(20), ISNULL(ROUND(SUM(dbo.SalesOrderDetails.ExtendedPrice), 2), 0)) AS [Total Ex GST]
完整修改后的查询代码:
SELECT CONVERT(varchar, DATEADD(dd, - 1, GETDATE()), 103) AS Date, 'Sales Orders' AS Type, COUNT(dbo.SalesOrder.SalesOrderID) AS Orders, SUM(dbo.SalesOrderDetails.QtyOrdered) AS Chairs, '$' + CONVERT(varchar(20), ISNULL(ROUND(SUM(dbo.SalesOrderDetails.ExtendedPrice), 2), 0)) AS [Total Ex GST] FROM dbo.SalesOrder LEFT OUTER JOIN dbo.SalesOrderDetails ON dbo.SalesOrder.SalesOrderID = dbo.SalesOrderDetails.SalesOrderID WHERE (dbo.SalesOrder.EntryDate >= CONVERT(char(8), DATEADD(dd, - 1, GETDATE()), 112)) AND (dbo.SalesOrder.EntryDate < CONVERT(char(8), GETDATE(), 112)) AND (dbo.SalesOrder.CustomerID <> 187)
方法2:使用FORMAT函数(更简洁)
SQL Server 2012及以上版本支持FORMAT函数,可以直接把数值格式化成带$的货币形式,还能自动处理小数位数,比如:
FORMAT(ISNULL(ROUND(SUM(dbo.SalesOrderDetails.ExtendedPrice), 2), 0), 'C', 'en-AU') AS [Total Ex GST]
这里'C'表示货币格式,'en-AU'是澳大利亚地区的本地化设置,会自动显示$符号,和你截图里的日期格式匹配度很高。
这样修改后,查询结果里的[Total Ex GST]字段就会显示类似$1234.56的格式了。
内容的提问来源于stack exchange,提问作者user9399808
相关产品推荐
相关产品推荐

