Mysql排序字母和数字的混合字符串,字母在数字之前

标签 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

所以它似乎只对字符串中的第一个字符进行操作。

最佳答案

假设所有字母都是大写的(根据你的例子),在转换数字后使用区分大小写(即 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/

相关文章:

mysql - 是否可以将自增主键值更新为mysql表的空值

mysql - 对于所有项目计数,左连接所有日期的意外结果

php - MySQL 使用 join 连接表

php - 搜索以特定词为起始词的记录

mysql - 如何在我的 sql 查询中获得更好的随机化?

mysql - 如何获取一组按字段排序的数据,但空值应该稍后出现并按不同的条件排序?

php - rowCount(),为什么它在创建用户时不起作用?有什么选择吗?

mysql - 数据库如何循环行?

php - 检查表数组值是否在范围内

mysql - 将 MySQL *.sql 脚本(语句)转换为 MS SQL SERVER *.sql 脚本(语句)