Как добавить запятые каждые 3 цифры для строки в Microsoft Server SQL? - PullRequest
0 голосов
/ 26 марта 2011

Есть ли встроенная функция для этой задачи?Если нет, как это можно сделать?Это varchar(20) и содержит только целые числа.Например, 309000 -> 309,000.

Есть идеи?

Спасибо,

1 Ответ

1 голос
/ 26 марта 2011

Вы можете использовать каскадные операторы 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

Примечание Имейте в виду, что возвращаемые данные больше не являются числом , поэтому ваш код переднего плана не сможет использовать его в качестве числа. Я бы всегда советовал, чтобы форматирование выполнялось с помощью внешнего кода .

.

1012 *, например *

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...