在case语句中格式化数字

时间:2018-08-16 19:50:13

标签: sql sql-server

我有一个带有一些case语句的查询,其中一个确定要支付多少帐户,现在一切正常,但是我希望对结果进行格式设置,以及如何在SQL中显示。我正在使用SQL Server Management Studio(SQL Server 2016)。

我正在尝试使用'$' + Format(col_name, '#,###')将结果显示为货币,但不显示小数。该图显示您运行查询后当前拥有的内容。

尝试合并以上格式时,我得到Msg 402 Error The data types nvarchar and varchar are incompatible in the subtract operator.

不确定如何修改我的代码。

CASE    
    WHEN (prior.amountpaid - prior.amountOwed) < 0 THEN p.amountpaid
    ELSE
         prior.amountpaid - prior.amountOwed + p.amountpaid
         END AS 'Amount Paid',

enter image description here

2 个答案:

答案 0 :(得分:3)

将FORMAT函数包装在整个CASE表达式周围,而不是在各个列上使用。

答案 1 :(得分:2)

不是每个列都格式化结果

CASE    
WHEN (prior.amountpaid - prior.amountOwed) < 0 THEN '$' + Format(p.amountpaid, '#,###')
ELSE
     '$' + Format((prior.amountpaid - prior.amountOwed + p.amountpaid), '#,###')
     END AS 'Amount Paid'

但是,如果您可以将格式设置留给前端而不是数据库调用,那么您永远不会知道您可能想在业务逻辑中执行什么数学运算并使用字符串是一件很痛苦的事情。