int를 선행 0이 있는 문자로 변환하려면 어떻게 해야 합니까?
int 데이터 필드를 선행 0이 있는 nvarchar로 변환해야 합니다.
예:
1 '001'로 변환
867 '000867'로 변환 등
고마워.
4시간 후 답변입니다...
나는 이 T-SQL 스크립트를 테스트했고 나에게 잘 작동합니다!
DECLARE @number1 INT, @number2 INT
SET @number1 = 1
SET @number2 = 867
SELECT RIGHT('000' + CAST(@number1 AS NCHAR(3)), 3 ) AS NUMBER_CONVERTED
SELECT RIGHT('000000' + CAST(@number2 AS NCHAR(6)), 6 ) AS NUMBER_CONVERTED
이 사용자 기능을 만들었습니다.
T-SQL 코드:
CREATE FUNCTION CIntToChar(@intVal BIGINT, @intLen Int) RETURNS nvarchar(20)
AS
BEGIN
-- BIGINT = 2^63-1 (9,223,372,036,854,775,807) Max size number
-- @intlen contains the string size to return
IF @intlen > 20
SET @intlen = 20
RETURN REPLICATE('0',@intLen-LEN(RTRIM(CONVERT(nvarchar(20),@intVal))))
+ CONVERT(nvarchar(20),@intVal)
END
예:
dbo를 선택합니다.CIntToChar ( 867 , 6 )AS COD_아이디
산출량
000867
이것을 시험해 보세요.select right('00000' + cast(Your_Field as varchar(5)), 5)
결과는 5자리 숫자로 표시됩니다(예: 00001,...., 01234).
SQL Server 2012에서 도입된 FORMAT() 함수를 사용할 수도 있습니다.http://technet.microsoft.com/library/hh213505.aspx
DECLARE @number1 INT, @number2 INT
SET @number1 = 1
SET @number2 = 867
SELECT FORMAT(@number1, 'd10')
SELECT FORMAT(@number2, 'd10')
사용하다REPLICATE따라서 선행 0을 모두 하드 코딩할 필요가 없습니다.
DECLARE @InputStr int
,@Size int
SELECT @InputStr=123
,@Size=10
PRINT REPLICATE('0',@Size-LEN(RTRIM(CONVERT(varchar(8000),@InputStr)))) + CONVERT(varchar(8000),@InputStr)
출력:
0000000123
이 질문의 하이잭은 아니지만 (N)CHAR 데이터 유형이 아닌 (N)VARCHAR을 사용해야 한다는 점을 메모해야 합니다.
RIGHT('000' + CAST(@number1 AS NCHAR(3)), 3 )
위의 세그먼트에서는 SQL 2005에서 올바른 응답을 얻을 수 없습니다.
RIGHT('000' + CAST(@number1 AS NVARCHAR(3)), 3 )
상기 세그먼트에서는 SQL 2005에서 원하는 응답을 얻을 수 있습니다.
varchar는 원하는 프리픽스 길이를 즉시 제공합니다.여기서 고정 길이의 데이터 유형은 길이를 지정하고 조정해야 합니다.
사용하는 것을 좋아합니다.
DECLARE @Length int
DECLARE @Number int
SET @Length = 9
SET @Number = 4
select right( POWER(10, @Length) + @Number, @Length)
이것은 나에게 준다.
000000004
데이터 타입 "int"는 10자리보다 클 수 없습니다.또한 "Len()" 함수는 int에서 동작하기 때문에 len() 함수를 호출하기 전에 int를 문자열로 변환할 필요가 없습니다.
마지막으로 int > 패딩하는 총 자리수(@intLen)는 고려하지 않습니다.
따라서 보다 간결하고 올바른 솔루션은 다음과 같습니다.
CREATE FUNCTION rf_f_CIntToChar(@intVal Int, @intLen Int) RETURNS nvarchar(10)
AS
BEGIN
IF @intlen > 20 SET @intlen = 20
IF @intlen < LEN(@intVal) RETURN RIGHT(CONVERT(nvarchar(10), @intVal), @intlen)
RETURN REPLICATE('0', @intLen - LEN(@intVal)) + CONVERT(nvarchar(10), @intVal)
END
그다지 우아한 것은 아니지만, 변환하고 싶은 숫자에 같은 수의 선행 0을 붙여 RIGHT 함수를 사용합니다.
예:
SELECT RIGHT(CONVERT(CHAR(7),1000000 + @number2),6)
결과: '000867'
SQL Server 2008 이상용 1라인 솔루션 (1개당):
DECLARE @DesiredLenght INT = 20;
SELECT
CONCAT(
REPLICATE(
'0',
(@DesiredLenght-LEN([Column])) * (1+SIGN(@DesiredLenght-LEN([Column])) / 2) ),
[Column])
FROM Table;
곱셈:SIGN표현은 와 동등하다MAX(0, @DesiredLenght-LEN([Column]))문제는...MAX()하나의 인수만 받아들입니다...
SQL Server에서 동작
declare @myNumber int = 123
declare @leadingChar varchar(1) = '0'
declare @numberOfLeadingChars int = 5
select right(REPLICATE ( @leadingChar , @numberOfLeadingChars ) + cast(@myNumber as varchar(max)), @numberOfLeadingChars)
즐거운 시간 되세요.
같은 문제를 안고, 이렇게 해결했습니다...심플하고 우아하다."4"는 문자열의 길이를 나타냅니다. 전달되는 정수의 길이에 관계없이 0부터 "4"까지 패딩됩니다.
STUFF(SomeVariableOrField,1,0,REPLICATE('0',4 - LEN(SomeVariableOrField)))
제 경우 10자 필드(NVARCHAR(10))에서 선행 0을 사용하려고 했습니다.소스 파일에는 다른 테이블에 가입하는 데 필요한 선행 0이 없습니다.이는 단순히 SQL Server 2008R2에 있기 때문일까요?
필드 = right(('0000000000' + [필드]), 10) 설정(SQL2012 이전 버전이기 때문에 Format()을 사용할 수 없습니다.
기존 데이터에 대해 이 작업을 수행.따라서 1 또는 987654321은 여전히 선행 0으로 10개의 공백을 모두 채웁니다.
새로운 데이터를 Import하여 Access 데이터베이스를 통해 테이블로 덤프하기 때문에 Access에서 SQL 서버 테이블로 새로운 레코드를 추가할 때 Format([Field],"00000000")을 사용할 수 있습니다.
select right('000' + convert(varchar(3),id),3) from table
example
declare @i int
select @i =1
select right('000' + convert(varchar(3),@i),3)
BTW가 int 컬럼인 경우 0은 유지되지 않습니다.프레젠테이션 레이어에서 또는 SELECT에서 필요한 경우만 수행합니다.
DECLARE @number1 INT, @number2 INT
SET @number1 = 1
SET @number2 = 867
'이 은 -- 'RTRIM'이 됩니다.3__
SELECT RIGHT('000' + RTRIM(CAST(@number1 AS NCHAR(3)), 3 )) AS NUMBER_CONVERTED
'이 은 -- 'RTRIM'이 됩니다.867___
SELECT RIGHT('000000' + RTRIM(CAST(@number2 AS NCHAR(6)), 6 )) AS NUMBER_CONVERTED
「」를 사용합니다.RIGHT하는 것도 다음과 을 할 수도 있습니다.
SUBSTRING(CAST((POWER(10, N) + value) AS NVARCHAR(N + 1)), 2, N)
서 ''는N는 표시하는 자리수의 합계입니다.제로가 값( 「 「 0 」3 ) 。N = 3
SUBSTRING(CAST((POWER(10, 3) + value) AS NVARCHAR(4)), 2, 3)
또는 교대로
SUBSTRING(CAST(1000 + value) AS NVARCHAR(4)), 2, 3)
이를 통해 필요한 값을 10의 거듭제곱에 더하고 선행 0을 충분히 생성한 후 선행 1을 잘라냅니다.
때문에 이 기술을 할 수 입니다.SUBSTRINGRIGHTHQL(HQL)을 사용하다
MYSQL에서는 다음과 같은 작업을 수행할 수 있습니다.
FUNCTION leadingZero(format VARCHAR(255), num VARCHAR(255))
RETURNS varchar(255) CHARSET utf8
BEGIN
return CONCAT(SUBSTRING(format,1,LENGTH(format)-LENGTH(num)),num);
END
예를 들어 다음과 같습니다.
leadingZero('000',999); returns '999'
leadingZero('0000',999); returns '0999'
leadingZero('xxxx',999); returns 'x999'
이게 도움이 되길 바라.안부 전합니다
혹시 이게 당신에게 도움이 될까요?
declare @val int,@len=800
select replace(str(@val,@len),' ','0')
언급URL : https://stackoverflow.com/questions/2397161/how-to-convert-int-to-char-with-leading-zeros
'programing' 카테고리의 다른 글
| NSAttributedString에서 클릭 가능한 링크를 작성하려면 어떻게 해야 합니까? (0) | 2023.04.19 |
|---|---|
| wpf 데이터그램 대체 행 컬러링 (0) | 2023.04.19 |
| xaml 파일과 xaml.cs 파일을 연결하는 방법 (0) | 2023.04.19 |
| SQL Server 문자열에서 HTML 태그를 삭제하려면 어떻게 해야 합니까? (0) | 2023.04.19 |
| Git은 심볼릭 링크를 어떻게 처리하나요? (0) | 2023.04.19 |