[sql] SQL Server에서 선행 0으로 패딩하여 숫자 서식 지정

SQL Server 2000에서 거의 10 년 동안 사용 된 오래된 SQL 테이블이 있습니다.

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

지금 웹 애플리케이션을 작성 중이며 직원 배지 번호를 저장해야합니다.

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

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

경우 EmployeeID7135이며,이 쿼리가 반환해야합니다 007135.



답변

숫자 6을 필요한 총 길이로 변경하십시오.

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

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

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

그리고이 0을 제거하고 ‘실제’숫자를 반환하는 코드 :

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


답변

FORMAT 함수를 사용하십시오 (SQL Server 2012 이상에서 작동).

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

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


답변

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

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

그러나 이것은 당신 EmployeeID이 숫자 값 이라고 가정 하고이 코드는 결과를 문자열로 변경하므로 원래 숫자 값을 다시 추가하는 것이 좋습니다

편집 물론 위의 질문을주의 깊게 읽지 않았습니다. 필드가 char(6)이므로 EmployeeID가 숫자 값이 아니라고 말합니다 . 이 답변은 여전히 ​​그 자체로 가치가 있지만 위의 질문에 대한 정답은 아닙니다.


답변

int를 변환하는 것을 싫어했고 이것은 훨씬 더 간단 해 보입니다. 단 하나의 문자열 변환과 간단한 추가가 있기 때문에 더 나은 성능을 발휘할 수 있습니다.

선택 RIGHT (1000000 + 직원 ID 6) …

“1000000”에 필요한 크기만큼 0이 있는지 확인하십시오.


답변

나는 모든 것을 한곳에 게시하고 있으며, 모두 4 선행 0으로 채울 수 있습니다. 🙂

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')


답변

완전성을위한 또 다른 방법입니다.

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


답변

2012 버전부터 다음을 사용할 수 있습니다.

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