MySQL排序字母和数字的混合字符串,数字前的字母

时间:2018-06-24 21:30:00

标签: mysql

我有一个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

因此,它似乎只对字符串的第一个字符起作用。

2 个答案:

答案 0 :(得分:0)

您可以检查数字而不是字母。

ORDER BY IF(name RLIKE '[0-9]', 2, 1), name

答案 1 :(得分:0)

假设所有字母均为大写字母(根据您的示例),请将数字binaryorder 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')

有点笨拙,但是可以用。