как конвертировать строковый формат - PullRequest
1 голос
/ 15 мая 2011

Как преобразовать число в форматированную строку фиксированной длины в SQL Server 2005 с помощью T-SQL?

например

Inputs: 5,01,007,0009,00011,01200
Result: 000005,000007,000009,0000011,001200

Ответы [ 5 ]

5 голосов
/ 15 мая 2011

Похоже, вы хотите, чтобы это 6 шириной. Попробуйте поместить символы вашего пэда, в данном случае нули, слева от вашей строки int / string, а затем возьмите 6 символов в правой части строки.

Как насчет этого?

DECLARE @i int;
SELECT @i = 1200;
SELECT RIGHT('000000'+ CAST(@i as varchar(10)), 6);
4 голосов
/ 15 мая 2011

Лучший способ сделать это - использовать оператор STR:

SELECT REPLACE(STR(123, 6), ' ', '0')

Приведенное выше утверждение приведет к 000123. Он в основном преобразует 123 в строку из 6 символов (дополненную пробелами), а затем использует REPLACE для замены пробелов нулями.

0 голосов
/ 07 июня 2011
declare @i int
set @i=10
print replace(str(@i),' ','0')
0 голосов
/ 16 мая 2011

Наилучший способ динамического распределения нуля в начале

С t (c) AS (ВЫБРАТЬ 1.99 СОЮЗ ВСЕ ВЫБРАТЬ 21.34 СОЮЗ ВСЕ ВЫБРАТЬ 1797.94 СОЮЗ ВСЕ ВЫБРАТЬ 300.36 СОЮЗ ВСЕ ВЫБРАТЬ 21.99UNION ALL SELECT 2.31),

Final (a, b, c, d) как (Выберите c, подстрока (приведение (c как varchar (10)), 1, charindex ('.', C) -1), (выберите max (len (подстрока (cast (c как varchar (10)), 1, charindex ('.', C) -1))) из t), подстрока (cast (c как varchar (10))), charindex ('.', c) + 1, len (c)) Из группы t по c)

выберите a, вправо (повторить ('0', c) + '' + b, 4) + '.' + d из финала

0 голосов
/ 16 мая 2011

ПОПРОБУЙТЕ

WITH t(c) AS
(
SELECT 1.99 UNION ALL 
SELECT 21.34  UNION ALL 
SELECT 1797.94  UNION ALL 
SELECT 300.36  UNION ALL 
SELECT 21.99  UNION ALL 
SELECT -2.31    
)

select 
c,

replicate(0,4-len(replace(substring(cast(c as varchar(10)),1,charindex('.',c)-1),'-','')))+''+
replace(replace(substring(cast(c as varchar(10)),1,charindex('.',c)-1),'-',''),'','-') +''+
replace(substring(cast(c as varchar(10)),charindex('.',c),len(c)),'-','')

from t

я все равно буду его оптимизировать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...