如何在T-SQL中格式化和舍入数字?

时间:2017-03-15 02:03:51

标签: sql sql-server tsql

我担心将数字转换为非小数和逗号分隔的结果。我需要实现正确的格式化并将数字四舍五入为货币,如下面的示例所示。请帮帮我。

select sum([TRANSACTION_PRICE]) from [dw_property_detail]

错误的结果:520400958.9
正确的结果:520,400,959

select sum(nullif([ACTUAL_SIZE],0)) from [dw_property_detail]

错误的结果:25595.5
正确的结果:(25,596)

select (Min(TRANSACTION_PRICE/ACTUAL_SIZE)) from [dw_property_detail]

错误的结果:3241412.6
正确的结果:($3,241,413)

4 个答案:

答案 0 :(得分:0)

鉴于它是2017年,我说有两个正确答案。

  1. 根据需要使用2012年推出的FORMAT功能,并使用相应的代码输出所需的结果。
  2. 格式化应尽可能在客户端完成。

答案 1 :(得分:0)

我确信很多人会同意格式化属于表示层。

那说,以下应该有所帮助。我还应该补充一点,Format()有一些很棒的功能,不知道它是一个表演者。

Declare @YourTable table (SomeVal decimal(18,2))
Insert Into @YourTable values
(-3241412.6),
(520400958.9)

Select Format(abs(round(SomeVal,0)),IIF(SomeVal<0,'($#,###)','$#,###'))
 From  @YourTable

返回

($3,241,413)
$520,400,959

答案 2 :(得分:-1)

如上所述,格式化应留给客户端,但您可以将金额转换为十进制,将其四舍五入,然后将其转换为金钱,并使用格式1来添加逗号。如果你想要

,你可以用子串去除.00
select convert(varchar(50), convert(money, convert(decimal, YourValue)), 1)

money format

小数点左边每三位数字1个逗号,小数点右边两位数字;例如,3,510.92。

或者:

select '$ ' + reverse(stuff(reverse(convert(varchar(50), convert(money, convert(decimal, YourValue)), 1)), 1, 3, ''))

答案 3 :(得分:-1)

很难记住这么多事情,

Declare @YourTable table (SomeVal decimal(18,2))
Insert Into @YourTable values
(3241412.6),
(520400958.9),(25595.5)

select FORMAT( round(SomeVal,0), 'C', 'en-us')
from @YourTable