SQL Server将varchar转换为int

时间:2013-10-07 23:30:13

标签: sql-server casting varchar

我有以下情况:

DECLARE @m VARCHAR(50) = '000000001'

WHILE (@m <= 10)
BEGIN
        PRINT @m
        -- Increment the iterator
        SET @m = @m  + 1
END

当我运行上面的代码时,我得到:

000000001
2
3
4
5
6
7
8
9
10

问题是,我需要结果如下:

000000001
000000002
000000003
000000004
000000005
000000006
000000007
000000008
000000009
000000010

我希望8号0在数字​​增加之前显示在数字之前,当数字达到10时它将是7 0。我尝试了以下但是它没有用,你会猜到8个0在10之前。

DECLARE @m VARCHAR(50) = '1'

WHILE (@m <= 10)
BEGIN
        PRINT '00000000' +@m
        -- Increment the iterator
        SET @m = @m  + 1
END

基本上我只想保留9位,这可能听起来很愚蠢,但我能说什么(我的老板想要那样)。

2 个答案:

答案 0 :(得分:0)

您可以使用该代码:

DECLARE @m VARCHAR(50) = '000000001'

WHILE (@m <= 10)
BEGIN
        PRINT SUBSTRING('00000000' + @m, LEN('000000000' + @m) - 9, 9)
        -- Increment the iterator
        SET @m = @m  + 1
END

答案 1 :(得分:0)

如果你真的必须:

DECLARE @i int; Set @i = 1;
WHILE @i <= 10
BEGIN
    PRINT RIGHT('00000000' + cast(@m as char(9)), 9);
    SET @i = @i + 1;
END 

但请不要。数据应存储在原始中,并且仅在显示时格式化,最好由客户端应用程序格式化。