2011-03-25 66 views
0

此任务是否有内置功能?如果没有,那怎么办?它是varchar(20),它只包含整数。例如,309000 -> 309,000如何在Microsoft Server SQL中为字符串每3个字符添加逗号?

有什么想法?

感谢,

+0

它是一个VARCHAR列或INT /数字/浮动?它包含哪些类型的数据(仅限int,小数)? – RichardTheKiwi 2011-03-25 23:22:03

+0

@Richard aka cyberkiwi:它是'varchar(20)',它只包含整数。谢谢。 – Chan 2011-03-25 23:23:58

+1

业务层不应该处理这个问题而不是数据访问层。 – 2011-03-25 23:34:36

回答

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 

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

例如

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 
相关问题