2013-10-07 38 views
1

我有以下情形:SQL服務器鑄造一個varchar到int

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 

我想八0以當它增加號碼前露面,這將有七0時數達到10餘噸的裏德以下,但它沒有工作,就會出現如你猜8周0的前10

DECLARE @m VARCHAR(50) = '1' 

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

基本上我想只保留9位,這聽起來愚蠢的,但我能說的(我的老闆想要這樣)。

+2

你應該告訴你的老闆你的RDBMS是用於高效地存儲和檢索數據的。格式應留給客戶端應用程序。 – RobIII

+0

告訴你的老闆可能有點職業限制... – Szymon

+1

@Szymon如果告訴你的老闆**他首先僱用你的**是限制你的職業選擇,那麼你應該得到地獄。 – RobIII

回答

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 

但請不要。數據應存儲在原始,並且只能在顯示時間格式化,最好由客戶端應用程序格式化。

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