programing

int를 선행 0이 있는 문자로 변환하려면 어떻게 해야 합니까?

golfzon 2023. 4. 19. 23:46
반응형

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

반응형