2011-03-25 101 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 
相關問題