SQL字串的數字部分遞增

iSQlServer發表於2010-12-21

昨天寫一個儲存過程時,有這樣一個字串  ZH#000001,每次插入新的行時,數字部分需要+1,既 第1001次就是 ZH#001001。在實際寫的過程中 select 'ZH#'+convert(varchar(20),('000001'+1))得到的結果是 ZH#2。原因是'000001'+1結果為2,轉int型時去掉了前面的5個0。

 

因為第一次遇見這種情況,沒有經驗,開始直接想怎麼判斷它得到的結果少了幾個0,然後將0補上,後來發現那樣做非常複雜,大腦裡的懶惰細胞發揮作用,絞盡妹汁的開始想有什麼簡單的辦法可以解決。找了以前的幾個類似情況,發現那些 XX#後面跟的是非0的數字開頭,例如 ZJ#1003。


我就想著直接給'000001'先加個頭,變成'1000001',這樣再遞增就可以得到想要的結果了。

declare @book_code varchar(50)

set @book_code=(select max(right('ZH#000001',6)) where 'ZH#000001' like 'ZH#%')

set @book_code='ZH#'+right(('1'+@book_code)+1,len('1'+@book_code)-1)

select @book_code

 


得到正確結果之後將問題給同事說,他也提供了一種類似的辦法,似乎比我那個更簡單

 

 

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtdeclare @book_code varchar(50)
set @book_code=(select max(right('ZH#000001',6)) where 'ZH#000001' like 'ZH#%')+1
set @book_code='ZH#'+right('000000'+@book_code,6)
select @book_code

 

 

在快閃記憶體中也有人提供了一種lpad(原字串,總長度,填充字串),和第二種方法類似

 

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtdeclare @book_code varchar(50)
set @book_code=(select max(right('ZH#000001',6)) where 'ZH#000001' like 'ZH#%')+1
set @book_code='ZH#'+lpad(@book_code,6,'0')
select @book_code

 

 

但2005似乎不支援這個函式,是2008新出來的嗎?語言真是越做越簡單了,簡單到讓人忘記思考。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-682265/,如需轉載,請註明出處,否則將追究法律責任。

相關文章