[sql-server] 선행 0을 사용하여 int를 char로 변환하는 방법은 무엇입니까?

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)를 COD_ID로 선택

산출

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


답변

이 질문을 High-Jack하는 것은 아니지만 (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’