我有一个需要按字母数字排序的 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
所以它似乎只对字符串中的第一个字符进行操作。
最佳答案
假设所有字母都是大写的(根据你的例子),在转换数字后使用区分大小写(即 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')
它有点笨拙,但它确实有效。
关于Mysql排序字母和数字的混合字符串,字母在数字之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51014123/