2013-09-29 294 views
0

我知道这已经被讨论了很多,我已经阅读了很多q/a以获得尽可能多的信息。我几乎有它的工作完美,但还不完全。以下是我得到的结果和我需要的一个例子。字母数字mysql排序

CMG-1 
CMG-1GP 
CMG-1EN 
CMG-2GP 
CMG-2 
CMG-2EN 
CMG-3 
etc... 

我必须订购的代码是

ORDER BY CAST(SUBSTRING(items.item_num, INSTR(items.item_num, '-') +1) AS UNSIGNED) ASC 

这适用于大部分,但没有正确排序号码后什么。前缀是不同的字母和不同的长度,所以它可以很好地忽略前缀。这是在没有正确排序的数字之后。有什么建议么?

+0

你能告诉你想要什么样的结果... – DRapp

+0

如果你想字母排序,不要把它转换为数字。这扔掉了信件。 – Barmar

+0

DRapp,我想把它分类为CMG-1,CMG-1EN,CMG-1GP等。EN应该在GP之前。 –

回答

0

尝试:

SELECT item_num 
FROM Table1 
ORDER BY LEFT(item_num,3) 
     , CAST(SUBSTRING(item_num, INSTR(item_num, '-') +1) AS UNSIGNED) 
     , item_num 
; 

演示:SQL Fiddle

+0

当我使用该方法时,它将CMG-10放置在CMG-2 –

+0

之前,我看到,这不在样本中。查看已更新。你可能不需要第一部分。 –