MySQL查询使用字母数字顺序

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

...

我不明白是什么导致了这一点.

请帮忙.

提前致谢

gbn*_*gbn 5

如果要为每个非数字前缀进行正确的数字排序,则需要单独对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)