SQL Server에서 앞에 0을 채워서 숫자 서식 지정
우리는 SQL Server 2000이 10 년 가까이 사용했던 오래된 SQL 테이블을 가지고 있습니다.
그것은, 우리의 직원 배지 번호로 저장됩니다 char(6)
에서 000001
에 999999
.
지금 웹 응용 프로그램을 작성 중이며 직원 배지 번호를 저장해야합니다.
새 테이블에서 바로 가기를 사용하여 이전 테이블을 복사 할 수는 있지만 int
값을에서 1
로 저장하여 더 나은 데이터 전송, 더 작은 크기 등을 원합니다 999999
.
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
경우 EmployeeID
7135이며,이 쿼리가 반환해야합니다 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)
직원 ID가 숫자 값이 아니라고 말합니다 . 이 답변은 여전히 가치가 있지만 위의 질문에 대한 정답은 아닙니다.
int를 변환 해야하는 것을 싫어했는데 훨씬 간단 해 보입니다. 하나의 문자열 변환과 간단한 추가 만 있기 때문에 성능이 향상 될 수도 있습니다.
오른쪽 선택 (1000000 + EmployeeId, 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
가능한 한 깨끗하고 변수로 대체 할 수있는 범위를 제공하십시오.
Select RIGHT(REPLICATE('0',6) + EmployeeID, 6) from dbo.RequestItems
WHERE ID=0
버전 2012부터는
SELECT FORMAT(EmployeeID,'000000')
FROM dbo.RequestItems
WHERE ID=0
SELECT replicate('0', 6 - len(employeeID)) + convert(varchar, employeeID) as employeeID
FROM dbo.RequestItems
WHERE ID=0
SELECT
cast(replace(str(EmployeeID,6),' ','0')as char(6))
FROM dbo.RequestItems
WHERE ID=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')
가장 간단한 것이 항상 최고입니다 :
Select EmployeeID*1 as EmployeeID
내 SQL 버전에서는 REPLICATE를 사용할 수 없습니다. 그래서 나는 이것을했다 :
SELECT
CONCAT(REPEAT('0', 6-LENGTH(emplyeeID)), emplyeeID) AS emplyeeID
FROM
dbo.RequestItems`
'IT story' 카테고리의 다른 글
C ++를 배우기 전에 C를 배워야합니까? (0) | 2020.07.28 |
---|---|
사용자 정의 어댑터에서 notifyDataSetChange가 작동하지 않습니다 (0) | 2020.07.28 |
파일 대신 문자열에 쓰는 XmlWriter (0) | 2020.07.28 |
아이폰 시뮬레이터-느린 연결을 시뮬레이션? (0) | 2020.07.28 |
중괄호없이 if 문을 사용하는 것은 나쁜 습관입니까? (0) | 2020.07.28 |