2011-09-16 6 views
2

정수를 4 자리의 varchar로 변환 할 수 있습니까? 예 정수 1이 있고 정수형 550의 경우 varchar '0001'을 얻습니다. varchar '0550'을 얻습니다.특수 정수 변환

감사

+0

은 무엇'정수로 일한다 ... 나를 놀라게 99999'? 또는 정수'-9999'? 또는 우리는'0-9999' 사이에 보장됩니까? –

+1

[이 질문에]보십시오 (http://stackoverflow.com/questions/121864/most-efficient-t-sql-way-to-pad-a-varchar-on-the-left-to-a-a- 특정 길이) 정확한 복제물은 아니지만 도움이 될 수 있습니다. – Jacob

+0

[이 질문] (http://stackoverflow.com/questions/2397161/how-to-convert-int-to-char-with-leading-zeros)도 도움이 될 수 있습니다. – denolk

답변

3

또는?

right('000'+ convert(varchar,MyNum),4) 

나는 다양한 방법에 대해 약간의 거친 타이밍을 수행했으며이 솔루션은 다른 것보다 조금 더 빠른 것처럼 보였다. 즉

DECLARE @loop INT; 
DECLARE @MyNum INT; 
DECLARE @Upper INT; 
DECLARE @Lower INT; 
DECLARE @result VARCHAR; 
DECLARE @start DATETIME; 

SET @Lower = 1; 
SET @Upper = 9999; 
SET @loop = 10000; 

SET @start = GETDATE(); 

WHILE @loop > 0 BEGIN 
    SELECT @MyNum = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0); 
    SET @loop = @loop -1; 
    SET @result = right('000'+ convert(varchar,@MyNum),4); 
    -- SET @result = right(10000 + @MyNum, 4); 
    -- SET @result = right(convert(float, @MyNum)/10000, 4); 
    -- SET @result = stuff('0000', 1 + 4 - len(@MyNum), len(@MyNum), @MyNum); 
    -- SET @result = replace(str(@MyNum, 4), ' ', '0'); 
END; 

SELECT GETDATE() - @start; 
+0

이것이 더 빠를 수 있는지 궁금합니다 ... right (convert (float, MyNum)/10000, 4) –

+0

다음은 Mikael의 답변이 더 나은 경우입니다. –

1

이 시도 :

SELECT REPLACE(STR(550, 4), ' ', '0') 

!

0

Onw way (len 입력> 4 인 경우 NULL);

;with t(f) as (
    select 1 union select 11 union select 111 union select 1111 
) 

select 
    f, 
    stuff('0000', 1 + 4 - len(f), len(f), f) 
from t 

>> 
f  (No column name) 
1  0001 
11  0011 
11  0111 
1111 1111