2011-09-16 24 views
2

是否有可能转换4个位置的整数varchar ..示例我有整数1,我得到varchar'0001',对于整数550我得到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-一定长度),不是一个确切的重复,但可以提供帮助。 – Jacob

+0

[这个问题](http://stackoverflow.com/questions/2397161/how-to-convert-int-to-char-with-leading-zeros)也可以帮助你。 – denolk

回答

3

or this?

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

我不知道这是否会更快...选择正确(convert(float,MyNum)/ 10000,4) –

+0

如果它更好,那么Mikael的答案可能更好。 –

1

试试这个:

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

0

Onw way(NULL,如果len输入> 4);

;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