2016-07-06 1 views
1

Мне нужно экспортировать таблицу в формате фиксированного формата. Когда у меня есть числовое поле, я должен добавить ведущие нули.Как добавить ноль перед числовым значением в T-SQL 2005 или 2008?

Я знаю с SQL Server 2012, я могу использовать FORMAT(). Как это сделать в SQL Server 2005?

Например, в столбце с номером 18, с фиксированной длиной 10, я должен экспортировать:

0000000018 
+0

Возможные duplicate of [Введите строку с ведущими нулями, чтобы она длилась 3 символа в SQL Server 2008] (http://stackoverflow.com/questions/16760900/pad-a-string-with -leading-zeros-so-its-3-characters-long-in-sql-server-2008) – HABO

ответ

0
right('00000000' + cast(YourValue as varchar(10)), 10) 
+0

Вам не хватает круглых скобок, и это приводит к введенному значению (YourValue). – scsimon

+0

пропустил все .... – xdd

+0

Подход с 'RIGHT' будет вырезать число, если ваш вход шире целевой ширины ... Вы можете взглянуть на мой ответ ... – Shnugo

2

Вы должны преобразовать его в varchar и использовать right.

select right(replicate('0', 10) + convert(varchar(10), YourNumberColumn), 10) 
+0

Привет, Шон, мне не нравится этот подход, потому что если номер входа шире вашего номера (вход = 1234, но ваша целевая ширина = 3 приводит к неправильному результату). Пожалуйста, взгляните на мой ответ ... – Shnugo

+0

@ Шнуго - это действительная точка. –

3

Я предпочитаю синтаксис

SELECT REPLACE(STR(YourNumber,X),' ','0') 

Х является число цифр, которые вы хотите.

Преимущество: Другие подходы сократили бы число и приведут к неправильным результатам, если вход шире, чем конечная длина. Такой подход позволил бы создать цепочку asterisc ("***")

Попробуйте

DECLARE @tbl TABLE(Nmbr INT) 
INSERT INTO @tbl VALUES(1),(12),(123),(1234); 

SELECT REPLACE(STR(Nmbr,3),' ','0') 
FROM @tbl 

Результат:

001 
012 
123 
*** 
0

Вы можете сделать так

replicate('0', 10 - Floor(LOG10(myField) + 1) + myField 
+1

В чем смысл использования LOG10 здесь? Я не говорю, что это неправильно, я хочу понять логику того, что это такое. –

+0

Вы попробовали это? Я думаю, что вы должны использовать 'myField' для строки, иначе у вас будет числовое дополнение, которое не то, что вы хотите. И, кажется, есть недостаток с цифрами '<= 10' ... – Shnugo

+0

Использование LOG10 это способ, которым я хотел бы использовать, чтобы точно определить, сколько цифр по примеру LOG10 (10) его 1 и LOG10 (99) s les than 2 и LOG (100) равно 2 –

Смежные вопросы