SQL Select,如何将数字显示为货币并将反向数字显示为正数
Posted
技术标签:
【中文标题】SQL Select,如何将数字显示为货币并将反向数字显示为正数【英文标题】:SQL Select, how to display numeric as money and reverse - numbers to positive 【发布时间】:2015-03-26 18:50:11 【问题描述】:我有一个格式化的数字列,其中包含如下数据:
8547.22
-1254.22
由于我无法控制的原因,我需要以这种格式显示 select 的结果(这是一个更大的 select 语句的一个字段),我也无法添加任何新函数。
-$8,547.22
$1,254.22
为了清楚起见,我需要添加货币格式('$' 和 ','),并将正数反转为负数,反之亦然。
我尝试了以下显然不起作用的方法:
case
when a.principal_outstanding like '-%'
then '$' + (SELECT RIGHT(REPLACE(CONVERT(varchar(20), (CAST(SUM(a.principal_outstanding) AS money)), 1), '.00', ''), LEN((REPLACE(CONVERT(varchar(20), (CAST(SUM(a.principal_outstanding) AS money)), 1), '.00', '')))) - 1)
when a.principal_outstanding not like '-%'
then '-' + '$' + (REPLACE(CONVERT(varchar(20), (CAST(SUM(a.principal_outstanding) AS money)), 1), '.00', ''))
else 'ERROR2'
end as '<currentBalance>'
有什么建议吗?
【问题讨论】:
您应该在客户端中格式化您的数据,而不是您的 SQL 查询。并且,将负数转换为正数(反之亦然)乘以 -1。 谢谢汤姆,我同意我应该在客户端而不是查询中进行格式化,但由于我无法控制的原因,我不能这样做。 【参考方案1】:如果您必须在 SQL 查询(而不是客户端)中执行此操作:
SELECT '$' + CONVERT(VARCHAR, CAST(TheValue * -1 AS MONEY), 1)
FROM TheTable
编辑:由于您使用的是负数,它变得更加丑陋,但确实有效。
SELECT CASE WHEN TheValue <= 0
THEN '$' + CONVERT(VARCHAR, CAST(TheValue * -1 AS MONEY), 1)
ELSE '-$' + CONVERT(VARCHAR, CAST(TheValue AS MONEY), 1)
END
FROM TheTable
【讨论】:
感谢您的帮助 Tom,这几乎可以满足我的需要,但是数据库中的正数现在返回为 $-8,547.22 而不是 -$8,547.22 @DanielL,它现在可以工作了,但我真的认为你想把它移到你的表示层,在那里它被构建来做这样的事情。以上是关于SQL Select,如何将数字显示为货币并将反向数字显示为正数的主要内容,如果未能解决你的问题,请参考以下文章