T-SQL - символ CAST с ведущими нулями в int - PullRequest
0 голосов
/ 22 мая 2018

Я хотел бы преобразовать символ с ведущими нулями в int, например, '00010' в 00010.Я пытался использовать CAST или CONVERT:

select CONVERT(int, '00010')

, но функция удаляет нули в начале и возвращает 10 вместо 00010.Вы знаете какое-нибудь простое решение для этого?Длина ввода всегда будет 5.

Ответы [ 3 ]

0 голосов
/ 22 мая 2018
SELECT FORMAT(CONVERT(INT,'00010'), 'd5') 

должен решить проблему:)

0 голосов
/ 22 мая 2018

Вы должны прочитать о типах данных.INT отмечает больше, чем битовый паттерн.Всякий раз, когда вы видите число в удобочитаемом формате, фактическое значение переводится в строку, состоящую из цифр.Но этот цифровой формат не является действительным INT.

Ведущие нули никогда не являются частью самого INT, но могут быть добавлены в строковое представление.Таким образом, ваш вопрос (взятый буквально) на самом деле не имеет никакого смысла.

Если есть строка типа 00012, и вы хотите использовать ее как число, вы должны просто привести ее:

SELECT CAST('00012' AS INT) + 2; --14

Другие ответы показывают вам некоторые подходы для получения строкового представления из INT, но это противоположное направление:

SELECT REPLACE((STR(12,5),' ','0'); --00012

Вы можете объединить эти подходы:

DECLARE @PaddedNumber CHAR(5)='00012'
SELECT REPLACE(STR(CAST(@PaddedNumber AS INT) + 2,5),' ','0'); --00014

Заполненный номер (который - по типу! - строка) приводится к INT, а затем используется в вычислениях.В результате получается INT, который можно преобразовать в дополненную строку.Но тип окончательного результата - строка ...

0 голосов
/ 22 мая 2018

Математически, ведущие нули не имеют смысла, поэтому Int не может иметь ведущих нулей.

Если вам нужно отобразить начальные нули, вы всегда можете преобразовать в varchar и использовать конкатенацию с right, например:

DECLARE @MyVal int = 10;
SELECT RIGHT('00000' + CAST(@MyVal as varchar(5)), 5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...