Onu*_*ece 1 mysql alphanumeric sql-order-by
我正在尝试获取一些产品型号的列表,所有型号都是字母数字.
我试过了
ORDER BY CAST(field_name AS UNSIGNED)
Run Code Online (Sandbox Code Playgroud)
和
ORDER BY field_name + 0
Run Code Online (Sandbox Code Playgroud)
和
ORDER BY LENGTH(field_name)
Run Code Online (Sandbox Code Playgroud)
和其他一些方法.
它们适用于大多数,但有一些值与订单不匹配.
我得到的结果是
EAG-75
EAG-110
...
ESCG-500
ESCG-600
...
EYG-40
EYG-55
...
EMG-440
EMG-20
EMG-27
...
EAG-100
...
我不明白是什么导致了这一点.
请帮忙.
提前致谢
如果要为每个非数字前缀进行正确的数字排序,则需要单独对2位进行排序
ORDER BY
-- sort by prefix only
LEFT(MyCol, INSTR(col, '-')-1),
-- sort numerically within prefix
CAST(SUBSTRING(MyCol, INSTR(col, '-')+1) AS UNSIGNED)
Run Code Online (Sandbox Code Playgroud)