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,如何将数字显示为货币并将反向数字显示为正数的主要内容,如果未能解决你的问题,请参考以下文章

将货币字符串转换为数字 Drupal Views / PHP

将数字格式化为货币金额

SQL CE select语句中的反向布尔(位)值

在SQL语句里面如何将字符型转换成数字型?

如何在组合框更改时设置数字列的值?

在角度 2 中,如何将数字显示为两位小数的四舍五入货币?