你有一个返回如下的结果
ORDER BY ProductCode ASC
CU522-15
CU522-17
CU522-18
CU522-19
CU522-4
我试图让cu522-4成为第一个而不是最后一个。 我无法更改ProductCode,因为它需要匹配另一个系统。 任何想法?
答案 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
执行值的数字转换,这是您想要进行排序的。