복붙노트

[SQL] SQL Server의 선두에 제로 패딩으로 숫자 서식

SQL

SQL Server의 선두에 제로 패딩으로 숫자 서식

우리는 10 년 가까이를 위해 SQL 서버 2000에서 사용 된 기존 SQL 테이블을 가지고있다.

그것은, 우리의 직원 배지 번호는 000001에서 999999 CHAR (6)로 저장됩니다.

지금은 웹 응용 프로그램을 쓰고 있어요, 나는 직원 배지 번호를 저장해야합니다.

나의 새로운 테이블에서 나는 지름길을 가지고 기존의 테이블을 복사하지만, 단순히 1에서 999999로 INT 값을 저장하여, 등 더 나은 데이터 전송, 작은 크기,을 기대하고있다.

C #에서, 나는 빨리 사용하여 배지 번호에 대한 INT 값을 포맷 할 수 있습니다

public static string GetBadgeString(int badgeNum) {
  return string.Format("{0:000000}", badgeNum);
  // alternate
  // return string.Format("{0:d6}", badgeNum);
}

어떻게뿐만 아니라 반환 값을 포맷하는이 간단한 SQL 쿼리를 수정하는 것?

SELECT EmployeeID
FROM dbo.RequestItems
WHERE ID=0

직원 ID가 7135 인 경우,이 쿼리는 007135를 반환해야합니다.

해결법

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

    1.총 길이는 할 필요가 무엇 이건 숫자 6을 변경합니다 :

    총 길이는 할 필요가 무엇 이건 숫자 6을 변경합니다 :

    SELECT REPLICATE('0',6-LEN(EmployeeId)) + EmployeeId
    

    열이 INT 인 경우 암시 적으로 VARCHAR로 변환 RTRIM을 사용할 수 있습니다

    SELECT REPLICATE('0',6-LEN(RTRIM(EmployeeId))) + RTRIM(EmployeeId)
    

    그리고 코드는 다음 0을 제거하고 '진짜'번호를 다시 얻을 수 있습니다 :

    SELECT RIGHT(EmployeeId,(LEN(EmployeeId) - PATINDEX('%[^0]%',EmployeeId)) + 1)
    
  2. ==============================

    2.그냥 (SQL 서버 2012 이상에서 작동) Format 함수를 사용 :

    그냥 (SQL 서버 2012 이상에서 작동) Format 함수를 사용 :

    SELECT FORMAT(EmployeeID, '000000')
    FROM dbo.RequestItems
    WHERE ID=0 
    

    참조 : http://msdn.microsoft.com/en-us/library/hh213505.aspx

  3. ==============================

    3.이 방식으로 절차를 변경할 수 있습니다

    이 방식으로 절차를 변경할 수 있습니다

    SELECT Right('000000' + CONVERT(NVARCHAR, EmployeeID), 6) AS EmpIDText, 
           EmployeeID
    FROM dbo.RequestItems 
    WHERE ID=0 
    

    그러나 이것이 당신의 직원 ID가 숫자 값이 있다고 가정하고이 코드를 문자열로 결과를 변경, 다시 원래의 숫자 값을 추가하는 것이 좋습니다

    의 편집은 물론 나는 조심스럽게 위의 질문을 읽을 수있다. 이 직원 ID가 숫자 값이 아닌 있도록 필드가 CHAR (6)이라고 말한다. 이 답변은 아직 그 자체의 값을 가지고 있지만, 그것은 위의 질문에 대한 정답이 아니다.

  4. ==============================

    4.미워 INT를 변환하는 데, 이것은 훨씬 더 간단 보인다. 하나의 문자열 변환 및 간단한 또한 거기에 있기 때문에 더 나은 수행 할 수 있습니다.

    미워 INT를 변환하는 데, 이것은 훨씬 더 간단 보인다. 하나의 문자열 변환 및 간단한 또한 거기에 있기 때문에 더 나은 수행 할 수 있습니다.

    RIGHT (1000000 + 직원 ID 6)를 선택 ...

    그냥 확인은 "1000000"을 가지고 필요한 크기만큼 제로로 적어도.

  5. ==============================

    5.나는 4 제로를 선도 패드에 나를 위해, 한 곳에서 모든 작품을 모두 게시하고 :)

    나는 4 제로를 선도 패드에 나를 위해, 한 곳에서 모든 작품을 모두 게시하고 :)

    declare @number int =  1;
    print right('0000' + cast(@number as varchar(4)) , 4)
    print right('0000' + convert(varchar(4), @number) , 4)
    print right(replicate('0',4) + convert(varchar(4), @number) , 4)
    print  cast(replace(str(@number,4),' ','0')as char(4))
    print format(@number,'0000')
    
  6. ==============================

    6.또 다른 방법은, 단지 완벽합니다.

    또 다른 방법은, 단지 완벽합니다.

    DECLARE @empNumber INT = 7123
    SELECT STUFF('000000', 6-LEN(@empNumber)+1, LEN(@empNumber), @empNumber)
    

    또는 귀하의 요청에 따라

    SELECT STUFF('000000', 6-LEN(EmployeeID)+1, LEN(EmployeeID), EmployeeID) 
             AS EmployeeCode
    FROM dbo.RequestItems
    WHERE ID=0
    
  7. ==============================

    7.버전 2012 년 당신이 사용할 수에

    버전 2012 년 당신이 사용할 수에

    SELECT FORMAT(EmployeeID,'000000')
    FROM dbo.RequestItems
    WHERE ID=0
    
  8. ==============================

    8.깨끗한으로는 얻을 수로 및 변수 교체의 범위를 제공합니다 :

    깨끗한으로는 얻을 수로 및 변수 교체의 범위를 제공합니다 :

    Select RIGHT(REPLICATE('0',6) + EmployeeID, 6) from dbo.RequestItems
    WHERE ID=0
    
  9. ==============================

    9.

    SELECT replicate('0', 6 - len(employeeID)) + convert(varchar, employeeID) as employeeID
    FROM dbo.RequestItems 
    WHERE ID=0
    
  10. ==============================

    10.

    SELECT 
        cast(replace(str(EmployeeID,6),' ','0')as char(6)) 
    FROM dbo.RequestItems
    WHERE ID=0
    
  11. ==============================

    11.이 솔루션은 모든 SQL 버전, 앞에 0 서명 / 음수 작동 :

    이 솔루션은 모든 SQL 버전, 앞에 0 서명 / 음수 작동 :

    DECLARE
        @n money = -3,
        @length tinyint = 15,
        @decimals tinyint = 0
    
    SELECT REPLICATE('-', CHARINDEX('-', @n, 1)) + REPLACE(REPLACE(str(@n, @length, @decimals), '-', ''), ' ', '0')
    
  12. ==============================

    12.가장 간단한 항상 최고입니다 :

    가장 간단한 항상 최고입니다 :

    Select EmployeeID*1 as EmployeeID 
    
  13. ==============================

    13.SQL 나는 내 버전에서는 복제를 사용할 수 없습니다. 그래서 이런 짓을 :

    SQL 나는 내 버전에서는 복제를 사용할 수 없습니다. 그래서 이런 짓을 :

    SELECT 
        CONCAT(REPEAT('0', 6-LENGTH(emplyeeID)), emplyeeID) AS emplyeeID 
    FROM 
        dbo.RequestItems`
    
  14. from https://stackoverflow.com/questions/9520661/formatting-numbers-by-padding-with-leading-zeros-in-sql-server by cc-by-sa and MIT license