我担心将数字转换为非小数和逗号分隔的结果。我需要实现正确的格式化并将数字四舍五入为货币,如下面的示例所示。请帮帮我。
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)
答案 0 :(得分:0)
鉴于它是2017年,我说有两个正确答案。
FORMAT
功能,并使用相应的代码输出所需的结果。答案 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来添加逗号。如果你想要
,你可以用子串去除.00select convert(varchar(50), convert(money, convert(decimal, YourValue)), 1)
小数点左边每三位数字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