2014-06-27 69 views
0

我想知道如何對我的SQL主鍵進行排序,它是由三部分組成的VARCHAR。要生成新密鑰,我需要查找當年的最大數字。SQL訂單字符串主鍵

MC-#Year-#Number
例如 MC-2014-1

訂單數據庫表:

MC-2013-5 
MC-2014-1 
MC-2014-2 
MC-2014-11 

喜歡的東西

​​

然而,鏈接的Java程序可以ALO檢索和按鍵排序。

+3

這是<fieldname>的領域面對併發/多重事務並不容易。 你需要做一些鎖定。 更好地使用序列或自動增量列(您可以每年重置一次)。 – Thilo

+1

如果可以的話,我會建議一個2列的複合主鍵 - 年份和數字,那麼一切都會更容易。 – NickJ

+0

@ user3703592所以你想根據最新的年份進行排序? – wrecklez

回答

1

本年度的最大數量僅僅是

select max(cast(substring(code,9) as int)) 
from mytable 
where code like concat('MC-', year(now()), '%'); 

不過我,你必須想想鎖,如果你只是檢索的最大數量這種方式,使插入別人同意。

0

如果我的理解是正確的,那麼您只是想根據最近一年對您的記錄進行排序? 在這種情況下,你可以在MySQL中使用MID,LEFT,RIGHT。這裏是我的例子,它排序它 但有一個限制,該字段的值必須始終在該格式上試試這個。 只是改變<tablename>爲您的實際表,包含MC-2014-1

SELECT * FROM <tablename> ORDER BY mid(<fieldname>,4,4) DESC 
0

鑑於從托爾斯滕KETTNER這裏一個例子,答案MS SQL

select max(cast(substring(code,9, (LEN(code)-7)) as int)) 
from mytable 
where code like concat('MC-', year(GETDATE()), '%');