Подтвердить что ты не робот

Преобразование числа в varchar в SQL с форматированием

Есть ли способ в T-SQL преобразовать TINYINT в VARCHAR с форматированием пользовательского номера? Например, у моего TINYINT есть значение 3, и я хочу преобразовать его в VARCH 03, так что он всегда показывает 2-значное число.

Я не вижу эту способность в функции CONVERT.

4b9b3361

Ответ 1

RIGHT('00' + CONVERT(VARCHAR, MyNumber), 2)

Будьте предупреждены, что это приведет к искажению цифp > 99. Возможно, вы захотите учитывать эту возможность.

Ответ 2

Вы можете попробовать это

DECLARE @Table TABLE(
        Val INT
)

INSERT INTO @Table SELECT 3
INSERT INTO @Table SELECT 30

DECLARE @NumberPrefix INT
SET @NumberPrefix = 2
SELECT  REPLICATE('0', @NumberPrefix - LEN(Val)) + CAST(Val AS VARCHAR(10))
FROM    @Table

Ответ 3

Используйте функцию RIGHT... например.

DECLARE @testnum TINYINT
SET @testnum = 3
PRINT RIGHT('00' + CONVERT(VARCHAR(2), @testnum), 2)

Ответ 4

Каков диапазон значений? Это от 0 до 10? Если да, попробуйте:

SELECT REPLICATE('0',2-LEN(@t)) + CAST(@t AS VARCHAR)

Это обрабатывает от 0 до 9, а также от 10 до 99.

Теперь tinyint может перейти к значению 255. Если вы хотите обрабатывать > от 99 до 255, попробуйте это решение:

declare @t  TINYINT
set @t =233
SELECT ISNULL(REPLICATE('0',2-LEN(@t)),'') + CAST(@t AS VARCHAR)

Чтобы понять решение, выражение слева от + вычисляет количество нулей в префикс строки.

В случае значения 3 длина равна 1. 2 - 1 равна 1. REPLICATE Добавляет один ноль. В случае значения 10 длина равна 2. 2 - 2 равна 0. REPLICATE ничего не добавляет. В случае значения 100 длина равна -1, которая производит NULL. Однако нулевое значение обрабатывается и устанавливается в пустую строку.

Теперь, если вы решите, что, поскольку tinyint может содержать до 255, и вы хотите, чтобы ваше форматирование было тремя символами, просто измените 2-LEN на 3-LEN в левом выражении, и вы настроены.

Ответ 5

declare @t  tinyint
set @t =3
select right(replicate('0', 2) + cast(@t as varchar),2)

То же: на эффект обрезания для чисел > 99

Если вы хотите обслуживать 1-255, вы можете использовать

select right(replicate('0', 2) + cast(@t as varchar),3)

Но это даст вам 001, 010, 100 и т.д.

Ответ 6

Здесь альтернатива, следующая за последним ответом

declare @t tinyint,@v tinyint
set @t=23
set @v=232
Select replace(str(@t,4),' ','0'),replace(str(@t,5),' ','0')

Это будет работать с любым числом и, изменяя длину функции str(), вы можете указать, сколько нужных нулей вам нужно. Разумеется, ваша длина строки всегдa >= максимальное количество цифр, которое может содержать ваш тип номера.

Ответ 7

Correción: 3-LEN

declare @t  TINYINT 
set @t =233
SELECT ISNULL(REPLICATE('0',3-LEN(@t)),'') + CAST(@t AS VARCHAR) 

Ответ 8

Имела ту же проблему с полем zipcode. Некоторые люди отправили мне файл excel с zip файлами, но они были отформатированы как #. Если бы они конвертировали их в строки, а также добавляли к ним 0, если они были < 5 len...

declare @int tinyint
set     @int = 25
declare @len tinyint
set     @len = 3

select right(replicate('0', @len) + cast(@int as varchar(255)), @len)

Вы просто изменяете @len, чтобы получить то, что хотите. Как отформатировано, вы получите...

001
002
...
010
011
...
255

В идеале вы также будете "varchar (@len)", но это скомпрометирует компиляцию SQL. Имейте, чтобы бросить в него фактическое # вместо var.