我有一个varchar字段,我需要对它进行字母数字排序,但是任何字母都必须在所有数字之前排序。因此,每当字母在字符串中的任何地方对数字排序时,它都必须排在最前面。例如
11B22
必须在
之前排序11122
我尝试了以下解决方案: ORDER BY alphabet first then follow by number
使用此ORDER BY子句
ORDER BY IF(name RLIKE '^[a-z]', 1, 2), name
它将正确排序
AAA
之前
1AA
但放
A1A
之前
AAA
因此,它似乎只对字符串的第一个字符起作用。
答案 0 :(得分:0)
您可以检查数字而不是字母。
ORDER BY IF(name RLIKE '[0-9]', 2, 1), name
答案 1 :(得分:0)
假设所有字母均为大写字母(根据您的示例),请将数字binary
至order by
转换为字母后,请使用区分大小写的字母(例如'0'
)'9'
分别从'a'
到'j'
:
...
order by binary replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
name, '0', 'a'), '1', 'b'), '2', 'c'), '3', 'd'), '4', 'e'), '5', 'f'), '6', 'g'), '7', 'h'), '8', 'i'), '9', 'j')
有点笨拙,但是可以用。