Mysql顺序由字母数字组成

时间:2014-12-02 12:19:42

标签: mysql

你有一个返回如下的结果

ORDER BY ProductCode ASC    

CU522-15
CU522-17
CU522-18
CU522-19
CU522-4

我试图让cu522-4成为第一个而不是最后一个。 我无法更改ProductCode,因为它需要匹配另一个系统。 任何想法?

3 个答案:

答案 0 :(得分:3)

假设它总是' - '这应该有效:

    SELECT   *
FROM     table
ORDER BY CAST(SUBSTRING(ProductCode,LOCATE('-',ProductCode)+1) AS SIGNED)

使用POSITION找到' - ',SUBSTRING以获取其后的数字,并使用CAST使其具有可比较的值。

答案 1 :(得分:2)

尝试

SELECT * FROM `mytable` ORDER BY LENGTH(ProductCode), ProductCode

CU522-4将首先因为它的字符数较少

其他人将正常排序

答案 2 :(得分:0)

如果您的产品代码前缀长度不一样,您可以执行以下操作:

order by substring_index(ProductCode, '-', 1),
         substring_index(ProductCode, '-', -1) + 0;

+ 0执行值的数字转换,这是您想要进行排序的。