SQL Order String主键

时间:2014-06-27 08:47:46

标签: java mysql sql

我想知道如何对我的SQL主键进行排序,这是一个由三部分组成的VARCHAR。要生成新密钥,我需要找到当前年份的最大数字。

MC-#年 - #号
例如 MC-2014-1

在数据库表中订购:

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

这样的东西
ORDER BY CAST(REPLACE(SUBSTRING(MC-2014-11,4),'_','') AS SIGNED)

但是,链接的java程序可以检索和排序密钥。

3 个答案:

答案 0 :(得分:1)

当前年份的最大数量只是

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

但我同意其他人的意见,你必须考虑锁定,如果你只是通过这种方式检索最大数量来插入。

答案 1 :(得分:0)

如果我的理解是正确的,您只想根据最近一年对记录进行排序? 在这种情况下,您可以使用MySQL中的MID,LEFT,RIGHT来完成它。这是我的例子来排序它 但是有一个限制,该字段的值必须始终在该格式上试试这个。 只需将<tablename>更改为实际表格,将<fieldname>更改为包含该MC-2014-1的字段

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

答案 2 :(得分:0)

考虑到Thorsten Kettner的回答,这是MS SQL的一个例子

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