Как добавить ноль к nvarchar в базе к id len - PullRequest
0 голосов
/ 03 августа 2020

Идея в том, что когда ID = 1, столбец Code 001 и ID = 10, столбец Code 010 и, наконец, я хочу, чтобы столбец Code получил данные Id, по этой причине это else.

create table test(
Id int,
Code as case when len(Id)=1 then '00'+Id when len(Id)=2 then '0'+Id Else Id End 
);

Ответы [ 3 ]

5 голосов
/ 03 августа 2020

Вам нужно, чтобы code было строкой. В простейшем методе используется concat():

code as (case when len(Id) = 1 then concat('00', Id) 
              when len(Id) = 2 then concat('0', Id)
              else convert(varchar(255), Id)
         end)

Или проще:

code as (right(concat('000', id), 3))

Конечно, эта версия не обрабатывает id значения, превышающие 999.

1 голос
/ 03 августа 2020

Если вы используете версию SQL Server, которая его поддерживает, функция format() дает вам:

select format(1, 'D3')

0 голосов
/ 03 августа 2020

Добрый день, Альберто Мора. Вы можете использовать функцию Right + concat, потому что с помощью LEFT + Concat вы не получите правильный результат:

   RIGHT(CONCAT('00',cast (Id AS NVARCHAR(MAX))),3)

ИЛИ с помощью функции Format:

  FORMAT(Id,'000')
...