Преобразовать число в 0 дополненную строку - PullRequest
0 голосов
/ 01 марта 2020
CASE 
   WHEN LEN(TIME1) = 3 THEN (RIGHT('0' + CAST(TIME1 AS VARCHAR(4)), 4)) 
END AS TIME1

Этот код работает, потому что когда значение равно 812, оно вернет 0812. Но иногда это 1012, поэтому значение возвращается как ноль.

Я написал

CASE 
   WHEN LEN(TIME1) = 3 
      THEN (RIGHT('0' + CAST(TIME1 AS VARCHAR(4)), 4)) 
      ELSE TIME1 
END AS TIME1

Но это просто снова дает мне 812 и 1012.

Я пытаюсь преобразовать его в 4 символа, чтобы я мог преобразовать его в чч: мм, а затем сопоставить со столбцом даты.

Ответы [ 2 ]

2 голосов
/ 01 марта 2020

Вам необходимо привести значение в строку. Но вам действительно не нужно case вообще. Просто используйте:

RIGHT('0' + CAST(TIME1 as VARCHAR(4)), 4)

Это будет работать как для 3, так и для 4 символов.

Вы можете расширить это до:

RIGHT('0000' + CAST(TIME1 as VARCHAR(4)), 4)

И это будет работать для 0- 4 персонажа.

1 голос
/ 01 марта 2020

Если вы используете SQL Сервер (на основе тега SSMS), тогда «нормальный» способ получить число с начальными нулями будет выглядеть так:

RIGHT('0000'+CONVERT(varchar(4),YourColumn),4)   

Вы можете использовать REPLICATE для более масштабируемой или параметризуемой версии:

RIGHT(REPLICATE('0',4)+CONVERT(varchar(4),YourColumn),4)

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

RIGHT(CONCAT(REPLICATE('0',4),YourColumn),4)
...