2012-08-16 55 views
0

我想選擇一個varchar字段的最大值和遞增1的值保留其原始格式的最大值。對於前SQL查詢來選擇一個varchar字段

客戶ID。 :​​是價值

加1,然後將其輸入到數據庫以及其他詳細信息。

所以結果應該是像CUS0000002 ..

這是我曾嘗試,事實上取得了我想要的東西..

但是,這是做到這一點的最好辦法?

SELECT 
    CONCAT('CUS', RIGHT(CONCAT('000000', CONVERT((CONVERT(MAX(RIGHT(customer_id, 7)) , UNSIGNED) + 1), CHAR(10))), 7)) AS customer_id 
FROM customer_master 
+0

是否總是3個字母和數字的休息? – 2012-08-16 09:06:18

+2

這對於併發更新不安全。更好地使用一個SEQUENCE。 – Thilo 2012-08-16 09:06:35

+4

只要使用一個數字,但始終按照您的意願格式化客戶編號輸出,是不是更明智? – BugFinder 2012-08-16 09:06:37

回答

0

我同意評論者的意見,數據庫不應該像這樣設計。但是,如果你堅持了下來,我建議這樣的事情,以獲得最高值:

select customer_id from customer_master 
    order by customer_id desc 
    fetch first row only; 

然後生成通過對返回的結果進行你的邏輯的新值。這會更快,因爲子字符串操作會很慢,在這種情況下,它們只會執行一次。

(假設每個ID都會有相同的前綴,即「CUS」;然而,你的代碼似乎暗示)。

0
SELECT MAX(RIGHT(CusID, 7)) AS id 
FROM tblCustomer