Добавление начального нуля к некоторым значениям в столбце в SQL-сервере - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь добавить начальное нулевое значение с некоторым типом столбца int / decimal / numeric на сервере SQL. Как этого добиться?

update a ---Int/Decimal/Numeric
   set Column='0'+b.column1
from #temp a
,#temp2 b ---Varchar column
where a.id=b.id

Ожидаемый результат: 001234567
Фактический результат: 1234567

Ответы [ 3 ]

1 голос
/ 25 октября 2019

Что делает ваш запрос, так это добавляет 0 к числовому типу данных: как и следовало ожидать, это не влияет на него. В основном, как прокомментировал @Fahmi, начальные нули не являются бессмысленными для числовых типов данных (и тому подобное).

При извлечении значения вы можете позаботиться об отображении, как правило, преобразовав его в строку, например:

select Id, '00' + cast(numberColumn as varchar(9)) from mytable
0 голосов
/ 25 октября 2019

Вот два варианта. Сначала измените тип столбца:

alter #temp alter column a varchar(255);

update a ---Int/Decimal/Numeric
    set Column = right('000000000' + b.column1, 9)
    from #temp a join
         #temp2 b ---Varchar column
         on a.id = b.id;

(обратите внимание на использование правильного синтаксиса JOIN.)

Альтернативой является вычисляемый столбец:

alter table #temp add column column_formatted as (format(a.column, '000000000'));

-- you still need the update
update a ---Int/Decimal/Numeric
    set Column = try_convert(int, b.column1)
    from #temp a join
         #temp2 b ---Varchar column
         on a.id = b.id;
0 голосов
/ 25 октября 2019

Вы можете использовать функцию FORMAT с пользовательским форматом: FORMAT

Пример: выбрать формат (12, '0000')

Возвращает: ' 0012 '

PS: обратите внимание, что возвращаемое значение является строкой. Числовые значения не имеют ведущих нулей, но их строковое представление может иметь их.

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