儘管我的解決方案可行,但我會建議您針對這種類型的密鑰生成。 「SELECT MAX(ID)+1」產生下一個密鑰將會在更多的併發數據庫中充滿問題,並且您有可能在繁忙的應用程序/系統中產生重複密鑰。
將密鑰分成兩列,一組與名稱爲'Partha'
,另一列用自動遞增號碼更好。
但是,話雖如此,以下是如何生成下一個鍵如你的例子。
您需要:
- 拆分的關鍵分爲兩個
- 遞增數字部分
- 將其轉換回一個字符串
- 墊其6個位數
這裏的SQL會這樣做:
SELECT SUBSTR(ID, 1, 6) || SUBSTR('000000' || (SUBSTR(MAX(ID), 7)+1), -6) FROM t1;
要將其墊到6個位數,我在前面加上6個零,然後抓住從得到的字符串中的最後6位數字與此類型的表達式
SUBSTR(x, -6)
爲什麼會得到1的原因是,你的表達類似分組這樣的:
SELECT .... + 1
而且....
一部分,你的字符串連接,然後未遂轉換爲數字,其結果爲0,因此0 + 1給出了1
要獲得聯合國填補的結果,你可能已經只是增加了一些括號:
SELECT 'Partha' || (SUBSTR(MAX(ID),6)+1) FROM t1
^ ^
然而,這也將是錯誤的,因爲它會返回Partha1
,這是因爲SUBSTR(..., 6)
抓住6個字符,並開始和第6個字符是最後a
在Partha
,因此要獲得Partha100
你需要這樣的:
SELECT 'Partha' || (SUBSTR(MAX(ID),7)+1) FROM t1
^
爲什麼4,當'Partha'有六個字符? –
對不起,我的錯誤它的6 – Parthasarathy
如果你是新來的sqlite,我應該通知你,你應該避免這種密鑰。如果你想要一個自動遞增的數字,創建一個列,爲你做這個,然後將它與一個「組」或類似的(不管Partha的意思)在一個單獨的列中組合。 「select max(id)+ 1」獲得下一個id可能是sqlite中的「工作」解決方案,但是如果你後來轉向更多的併發數據庫,它將充滿了問題。 –