如何在Microsoft Server SQL中为每个3位数字符串添加逗号?

时间:2011-03-25 23:20:41

标签: sql sql-server-2008

此任务是否有内置功能?如果没有,怎么办呢?它是varchar(20),它只包含整数。例如,309000 -> 309,000

有什么想法吗?

谢谢,

2 个答案:

答案 0 :(得分:1)

您可以使用级联CASE语句,可以将其放入函数

case
when i > 999999999 then STUFF(STUFF(STUFF(i,2,0,','),6,0,','),10,0,',')
when i > 999999 then STUFF(STUFF(i,LEN(i)-5,0,','),len(i)-1,0,',')
when i > 999 then STUFF(i,LEN(i)-2,0,',')
else CONVERT(varchar(10),i)
end

注意请注意,返回的数据不再是数字,因此您的前端代码将无法将其用作数字。我总是建议通过前端代码完成格式化

e.g。

select col1, col2, col3,
    case
    when i > 999999999 then STUFF(STUFF(STUFF(i,2,0,','),6,0,','),10,0,',')
    when i > 999999 then STUFF(STUFF(i,LEN(i)-5,0,','),len(i)-1,0,',')
    when i > 999 then STUFF(i,LEN(i)-2,0,',')
    else CONVERT(varchar(10),i)
    end int_with_commas_as_varchar
from tbl

或创建一个功能

create function dbo.formatThousands(@i int)
returns varchar(20) as
begin
return
    case
    when @i > 999999999 then STUFF(STUFF(STUFF(@i,2,0,','),6,0,','),10,0,',')
    when @i > 999999 then STUFF(STUFF(@i,LEN(@i)-5,0,','),len(@i)-1,0,',')
    when @i > 999 then STUFF(@i,LEN(@i)-2,0,',')
    else CONVERT(varchar(10),@i)
    end
end

答案 1 :(得分:0)

您可以使用

SELECT FORMAT(2123456789, '#,#')