복붙노트

[SQL] 어떻게 T-SQL에서 제로 패딩 문자열로 int를 변환합니까?

SQL

어떻게 T-SQL에서 제로 패딩 문자열로 int를 변환합니까?

하자가 00000001 같은, 내가 제로 패딩 문자열로 그 INT로 변환 할 수 있습니다 방법 1의 값을 int를 가지고 있다고?

해결법

  1. ==============================

    1.

    Declare @MyInt integer Set @MyInt = 123
    Declare @StrLen TinyInt Set @StrLen = 8
    
    Select Replace(Str(@MyInt, @StrLen), ' ' , '0')
    
  2. ==============================

    2.또 다른 방법은 다음과 같습니다

    또 다른 방법은 다음과 같습니다

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

    3.2012 SQL 서버로 당신은 지금이 작업을 수행 할 수 있습니다

    2012 SQL 서버로 당신은 지금이 작업을 수행 할 수 있습니다

    format(@int, '0000#')
    
  4. ==============================

    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. ==============================

    5.사용 FORMAT (<전화 번호>를 '00000000') 많은 제로로 사용 당신이 당신의 최종 결과에 숫자를 가질 필요가있다.

    사용 FORMAT (<전화 번호>를 '00000000') 많은 제로로 사용 당신이 당신의 최종 결과에 숫자를 가질 필요가있다.

    여기에 FORMAT 함수의 공식 문서입니다

  6. ==============================

    6.나는 특정 전체 길이에 패드에 노력하고있어 경우에, 나는 그래서 같은 복제 및 DATALENGTH 함수를 사용합니다 :

    나는 특정 전체 길이에 패드에 노력하고있어 경우에, 나는 그래서 같은 복제 및 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의 크기에 대해 걱정하지.

  7. ==============================

    7.난 항상 사용 :

    난 항상 사용 :

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

    의 Z- 내재적 가산 / 연접 대해 INT로 열로 변환으로부터 SQL을 멈춘다.

  8. ==============================

    8.INT 부정적인를 갈 수 있다면 그렇게 주변이 가끔 이렇게 얻기 위해, 문제가있다 :

    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
    
  9. ==============================

    9.아주 정직 방법으로 패딩에 대해 생각하는 '공의, 당신은 당신의 @의 _int 4 개 소수를 가지고있어 고정 된 경우 4 주사한다'0 ':

    아주 정직 방법으로 패딩에 대해 생각하는 '공의, 당신은 당신의 @의 _int 4 개 소수를 가지고있어 고정 된 경우 4 주사한다'0 ':

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

    ; 당신의 고정 된 공간이 3 인 경우, 당신은 3'0의 주입

        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'
    
  10. ==============================

    10.아니면 정말 하드 코어를 가고 싶어한다면 ... ;-)

    아니면 정말 하드 코어를 가고 싶어한다면 ... ;-)

    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
    
  11. ==============================

    11.그리고 복제를 사용하여이 하나있다 :

    그리고 복제를 사용하여이 하나있다 :

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

    물론, 당신은 리터럴을 대체 할 수있는 7 필요에 따라 적절한 기능을 가진 '1'; 위는 당신에게 당신의 예를 제공합니다. 예를 들면 :

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

    의지 패드 8 자 제로 위로 미만 8 곳의 정수입니다.

    이제 REPLICATE의 두 번째 인수에 부정적인 번호는 NULL을 반환합니다. 그게 가능하다고한다면, 다음 8 개 이상의 문자가있는 경우 0을 선도하지 않고 수를 반환하는 유착을 사용할 수 있습니다 (예를 들어, @myInt는 위의 예에서 1 억 이상이 될 수 있음) :

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

    12.나는 찰스 Bretana의 대답은 간단하고 빠른라고 생각합니다. STR을 사용하지 않고 유사한 솔루션입니다 :

    나는 찰스 Bretana의 대답은 간단하고 빠른라고 생각합니다. STR을 사용하지 않고 유사한 솔루션입니다 :

    SELECT REPLACE(REVERSE(
            CONVERT(CHAR(5 /*<= Target length*/)
                    , REVERSE(CONVERT(VARCHAR(100), @MyInt)))
         ), ' ', '0')
    
  13. from https://stackoverflow.com/questions/309165/how-do-i-convert-an-int-to-a-zero-padded-string-in-t-sql by cc-by-sa and MIT license