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

Как преобразовать int в нулевую заполненную строку в T-SQL?

Скажем, у меня есть int со значением 1. Как я могу преобразовать этот int в нулевую заполненную строку, такую ​​как 00000001?

4b9b3361

Ответ 1

Declare @MyInt integer Set @MyInt = 123
Declare @StrLen TinyInt Set @StrLen = 8

Select Replace(Str(@MyInt, @StrLen), ' ' , '0')

Ответ 2

Другой способ:

DECLARE @iVal int = 1
select REPLACE(STR(@iVal, 8, 0), ' ', '0')

Ответ 3

по состоянию на SQL Server 2012 вы можете это сделать:

format(@int, '0000#')

Ответ 4

Эта работа для меня:

SELECT RIGHT('000' + CAST(Table.Field AS VARCHAR(3)),3) FROM Table

...

Я создал эту функцию пользователя

Код T-SQL:

CREATE FUNCTION CIntToChar(@intVal Int, @intLen Int) RETURNS nvarchar(24) AS BEGIN

IF @intlen > 24
   SET @intlen = 24

RETURN REPLICATE('0',@intLen-LEN(RTRIM(CONVERT(nvarchar(24),@intVal)))) 
    + CONVERT(nvarchar(24),@intVal) END

Пример:

SELECT dbo.CIntToChar(867, 6) AS COD_ID

ВЫХОД

000867

Ответ 5

Если я пытаюсь выполнить привязку к определенной общей длине, я использую функции REPLICATE и DATALENGTH, например:

DECLARE @INT INT
DECLARE @UNPADDED VARCHAR(3)
DECLARE @PADDED VARCHAR(3)

SET @INT = 2
SET @UNPADDED = CONVERT(VARCHAR(3),@INT)
SET @PADDED = REPLICATE('0', 3 - DATALENGTH(@UNPADDED)) + @UNPADDED
SELECT @INT, @UNPADDED, @PADDED

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

Ответ 6

Я всегда использую:

SET @padded = RIGHT('z0000000000000'
  + convert(varchar(30), @myInt), 8)

Z останавливает SQL от неявного покрытия строки в int для добавления/конкатенации.

Ответ 7

Если int может пойти отрицательно, у вас есть проблема, поэтому обойти это я иногда делаю:

DECLARE @iVal int 
set @iVal = -1
    select 
        case 
            when @ival >= 0 then right(replicate('0',8) + cast(@ival as nvarchar(8)),8)
            else '-' + right(replicate('0',8) + cast(@ival*-1 as nvarchar(8)),8)
        end

Ответ 8

Очень простой способ подумать о дополнении с помощью "0", если вы установили, что ваш @_int имеет 4 десятичных знака, вы вводите 4 '0's:

    select RIGHT( '0000'+ Convert(varchar, @_int), 4) as txtnum

; если ваше фиксированное пространство равно 3, вы вводите 3'0's

    select RIGHT( '000'+ Convert(varchar, @_int), 3) as txtnum

; ниже я вводю '00' для генерации 99 меток для каждого блока

declare @_int int
set @_int = 1
while @_int < 100 Begin
    select BldgName + '.Floor_' + RIGHT( '00'+ Convert(varchar, @_int), 2) 
    + '.balcony' from dbo.tbl_FloorInfo group by BldgName
    set @_int = @_int +1
End

Результат:

    'BldgA.Floor_01.balcony'
    'BldgB.Floor_01.balcony'
    'BldgC.Floor_01.balcony'
     ..
     ..
    'BldgA.Floor_10.balcony'
    'BldgB.Floor_10.balcony'
    'BldgC.Floor_10.balcony'
     ..
     ..
     ..
    'BldgA.Floor_99.balcony'
    'BldgB.Floor_99.balcony'
    'BldgC.Floor_99.balcony'

Ответ 9

Или, если вы действительно хотите перейти на hard-core...; -)

declare @int int
set @int = 1

declare @string varchar(max)
set @string = cast(@int as varchar(max))

declare @length int
set @length = len(@string)

declare @MAX int
set @MAX = 8

if @length < @MAX
begin
    declare @zeros varchar(8)
    set @zeros = ''

    declare @counter int
    set @counter = 0

    while (@counter < (@MAX - @length))
    begin
        set @zeros = @zeros + '0'
        set @counter = @counter + 1
    end
    set @string = @zeros + @string
end
print @string

Ответ 10

А потом вот этот, используя REPLICATE:

SELECT REPLICATE('0', 7) + '1'

Конечно, вы можете заменить литералы 7 и "1" соответствующими функциями по мере необходимости; приведенное выше дает вам ваш пример. Например:

SELECT REPLICATE('0', 8 - LEN(CONVERT(nvarchar, @myInt))) + CONVERT(nvarchar, @myInt)

будет помещаться целое число менее 8 мест с нулями до 8 символов.

Теперь отрицательное число во втором аргументе REPLICATE вернет NULL. Итак, если это возможно (например, @myInt может превышать 100 миллионов в приведенном выше примере), вы можете использовать COALESCE для возврата числа без начальных нулей, если их больше 8 символов:

SELECT COALESCE(REPLICATE('0', 8 - LEN(CONVERT(nvarchar, @myInt))) + CONVERT(nvarchar, @myInt), CONVERT(nvarchar, @myInt))