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를 변환하는 게 싫었고, 이게 훨씬 간단해 보여요.문자열 변환과 간단한 추가가 하나뿐이기 때문에 성능이 더욱 향상될 수 있습니다.
RIGHT(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')
버전 2012 이후로는
SELECT FORMAT(EmployeeID,'000000')
FROM dbo.RequestItems
WHERE ID=0
또 다른 방법은, 단지 완성도를 위해서입니다.
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
6자를 넘기지 않고 음수를 계산하려면...
FORMAT(EmployeeID, '000000;-00000')
가능한 한 깔끔하고 변수로 대체할 수 있는 범위를 제공합니다.
Select RIGHT(REPLICATE('0',6) + EmployeeID, 6) 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 버전에서는 REPLICE를 사용할 수 없습니다.그래서 이렇게 했습니다.
SELECT
CONCAT(REPEAT('0', 6-LENGTH(emplyeeID)), emplyeeID) AS emplyeeID
FROM
dbo.RequestItems`
언급URL : https://stackoverflow.com/questions/9520661/formatting-numbers-by-padding-with-leading-zeros-in-sql-server
'sourcecode' 카테고리의 다른 글
PowerShell에서 사용되는 GetType, 변수 간 차이 (0) | 2023.04.08 |
---|---|
PowerShell 탭 완성을 Bash와 동일하게 하는 방법 (0) | 2023.04.08 |
PowerShell 3의 파일 확장자 (0) | 2023.04.08 |
보안 문자열을 일반 텍스트로 변환 (0) | 2023.04.08 |
테이블이 있는 경우 테이블을 드롭하려면 어떻게 해야 합니까? (0) | 2023.04.08 |