답변:
나는 이것이 당신이 찾고있는 것일 수 있다고 믿습니다.
SELECT padded_id = REPLACE(STR(id, 4), SPACE(1), '0')
FROM tableA
또는
SELECT REPLACE(STR(id, 4), SPACE(1), '0') AS [padded_id]
FROM tableA
두 번째 예제에서 구문을 테스트하지 않았습니다. 100 % 작동하는지 확실하지 않습니다. 약간의 조정이 필요할 수 있습니다.하지만 원하는 출력을 얻는 방법에 대한 일반적인 아이디어를 전달합니다.
편집하다
의견에 나열된 문제를 해결하려면 ...
@ pkr298-예 STR은 숫자에서만 작동합니다 ... OP의 필드는 ID입니다 ... 따라서 숫자로만.
@Desolator-물론 작동하지 않습니다 ... 첫 번째 매개 변수의 길이는 6 자입니다. 다음과 같이 할 수 있습니다.
SELECT REPLACE(STR(id,
(SELECT LEN(MAX(id)) + 4 FROM tableA)), SPACE(1), '0') AS [padded_id] FROM tableA
이것은 이론적으로 골 포스트를 움직여야합니다 ... 숫자가 커질수록 항상 작동해야합니다 .... 1 또는 123456789 ...
따라서 최대 값이 123456이면 0000123456이 표시되고 최소값이 1이면 0000000001이 표시됩니다.
SQL Server는 이제 2012 버전부터 FORMAT 함수를 지원 하므로 다음과 같이됩니다.
SELECT FORMAT(id, '0000') FROM TableA
트릭을 할 것입니다.
ID 또는 열이 a에 varchar
있고 먼저 변환 한 숫자를 나타내는 경우 :
SELECT FORMAT(CONVERT(INT,id), '0000') FROM TableA
declare @T table(id int)
insert into @T values
(1),
(2),
(12),
(123),
(1234)
select right('0000'+convert(varchar(4), id), 4)
from @T
결과
----
0001
0002
0012
0123
1234
이전 게시물이지만 아마도 이것은 누군가를 도울 수 있습니다.
공백이 아닌 4 개의 문자로 끝날 때까지 완료하려면 :
SELECT RIGHT ('0000'+COLUMNNAME, 4) FROM TABLENAME;
10 시까 지 완료하려면 :
SELECT RIGHT ('0000000000'+COLUMNNAME, 10) FROM TABLENAME;
열이 numeric 인 경우 먼저 다음 코드를 사용하여 varchar로 변환하십시오.
Select RIGHT('0000'+Convert(nvarchar(20), COLUMNNAME), 4)
From TABLENAME
숫자 필드로 10까지 완료하려면 :
SELECT RIGHT ('0000000000'+Convert(nvarchar(20), COLUMNNAME), 10) FROM TABLENAME;
-이것들을보세요.
select FORMAT(1, 'd4');
select FORMAT(2, 'd4');
select FORMAT(12, 'd4');
select FORMAT(123, 'd4');
select FORMAT(1234, 'd4');
-이것이 도움이되기를 바랍니다.
이것은 문자열, 정수 및 숫자에 대해 작동합니다.
SELECT CONCAT(REPLICATE('0', 4 - LEN(id)), id)
어디 4
길이를 바람직하다. 4 자리 이상의 숫자에 대해 작동하며 NULL
값에 빈 문자열을 반환 합니다.
누군가가 여전히 관심이 있다면 DATABASE.GUIDE : Left Padding in SQL Server – 3 LPAD () Equivalents 에서이 기사를 찾았습니다.
요컨대, 그 기사에서 언급 된 세 가지 방법이 있습니다.
id = 12라고 가정하고 0012로 표시해야합니다.
방법 1 – RIGHT () 함수
사용 첫 번째 방법은 선행 0을 추가 한 후 RIGHT () 함수를 사용하여 문자열의 맨 오른쪽 부분 만 반환합니다.
SELECT RIGHT('00' + '12', 4);
결과:
0012
방법 2 – RIGHT () 및 REPLICATE () 조합 사용
이 방법은 이전 방법과 거의 동일하지만 세 개의 0을 REPLICATE () 함수로 간단히 바꾼다는 점만 다릅니다.
SELECT RIGHT(REPLICATE('0', 2) + '12', 4);
결과:
0012
방법 3 – REPLACE () 및 STR () 조합 사용
이 방법은 이전 방법과 완전히 다른 각도에서 비롯됩니다.
SELECT REPLACE(STR('12', 4),' ','0');
결과:
0012
기사를 확인하십시오. 예제와 함께 더 자세한 분석이 있습니다.
SQL 서버의 함수에 이것을 필요로하고 Patrick의 대답을 약간 조정했습니다.
declare @dossierId int = 123
declare @padded_id varchar(7)
set @padded_id = REPLACE(
SPACE(7 - LEN(@dossierId)) + convert(varchar(7), @dossierId),
SPACE(1),
'0')
SELECT @dossierId as '@dossierId'
,SPACE(LEN(@dossierId)) + convert(varchar(7)
,@dossierId) as withSpaces
,@padded_id as '@padded_id'
기능 생성 :
Create FUNCTION [dbo].[PadLeft]
(
@Text NVARCHAR(MAX) ,
@Replace NVARCHAR(MAX) ,
@Len INT
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @var NVARCHAR(MAX)
SELECT @var = ISNULL(LTRIM(RTRIM(@Text)) , '')
RETURN RIGHT(REPLICATE(@Replace,@Len)+ @var, @Len)
END
예:
Select dbo.PadLeft('123456','0',8)
SELECT @var = LTRIM(RTRIM(@Text))
내 솔루션은 효율적이지 않지만 일부 항목에 영숫자 값이있는 varchar로 값 (은행 수표 번호 및 전신 송금 참조 번호)이 저장되고 길이가 6 자 미만인 경우 패딩해야하는 상황에서 도움이되었습니다.
누군가가 같은 상황을 만나면 공유 할 생각
declare @minlen int = 6
declare @str varchar(20)
set @str = '123'
select case when len(@str) < @minlen then REPLICATE('0',@minlen-len(@str))+@str else @str end
--Ans: 000123
set @str = '1234'
select case when len(@str) < @minlen then REPLICATE('0',@minlen-len(@str))+@str else @str end
--Ans: 001234
set @str = '123456'
select case when len(@str) < @minlen then REPLICATE('0',@minlen-len(@str))+@str else @str end
--Ans: 123456
set @str = '123456789'
select case when len(@str) < @minlen then REPLICATE('0',@minlen-len(@str))+@str else @str end
--Ans: 123456789
set @str = '123456789'
select case when len(@str) < @minlen then REPLICATE('0',@minlen-len(@str))+@str else @str end
--Ans: 123456789
set @str = 'NEFT 123456789'
select case when len(@str) < @minlen then REPLICATE('0',@minlen-len(@str))+@str else @str end
--Ans: NEFT 123456789
더 효율적인 방법은 다음과 같습니다.
Select id, LEN(id)
From TableA
Order by 2,1
The result :
id
----
1
2
12
123
1234