我想知道如何對我的SQL主鍵進行排序,它是由三部分組成的VARCHAR
。要生成新密鑰,我需要查找當年的最大數字。SQL訂單字符串主鍵
MC-#Year-#Number
例如 MC-2014-1
訂單數據庫表:
MC-2013-5
MC-2014-1
MC-2014-2
MC-2014-11
喜歡的東西
然而,鏈接的Java程序可以ALO檢索和按鍵排序。
我想知道如何對我的SQL主鍵進行排序,它是由三部分組成的VARCHAR
。要生成新密鑰,我需要查找當年的最大數字。SQL訂單字符串主鍵
MC-#Year-#Number
例如 MC-2014-1
訂單數據庫表:
MC-2013-5
MC-2014-1
MC-2014-2
MC-2014-11
喜歡的東西
然而,鏈接的Java程序可以ALO檢索和按鍵排序。
本年度的最大數量僅僅是
select max(cast(substring(code,9) as int))
from mytable
where code like concat('MC-', year(now()), '%');
不過我,你必須想想鎖,如果你只是檢索的最大數量這種方式,使插入別人同意。
如果我的理解是正確的,那麼您只是想根據最近一年對您的記錄進行排序? 在這種情況下,你可以在MySQL中使用MID,LEFT,RIGHT
。這裏是我的例子,它排序它 但有一個限制,該字段的值必須始終在該格式上試試這個。 只是改變<tablename>
爲您的實際表,包含MC-2014-1
SELECT * FROM <tablename> ORDER BY mid(<fieldname>,4,4) DESC
鑑於從托爾斯滕KETTNER這裏一個例子,答案MS SQL
select max(cast(substring(code,9, (LEN(code)-7)) as int))
from mytable
where code like concat('MC-', year(GETDATE()), '%');
這是
<fieldname>
的領域面對併發/多重事務並不容易。 你需要做一些鎖定。 更好地使用序列或自動增量列(您可以每年重置一次)。 – Thilo如果可以的話,我會建議一個2列的複合主鍵 - 年份和數字,那麼一切都會更容易。 – NickJ
@ user3703592所以你想根據最新的年份進行排序? – wrecklez