【问题标题】:Sorting records first by numbers and then alphabets in MySQL在MySQL中先按数字排序记录,然后按字母排序
【发布时间】:2017-12-17 14:02:22
【问题描述】:

我有一个名为“test”的表,其中有一列名为“custom_id”,它可以是字母和整数的混合。我希望 MySQL 查询首先根据整数对其进行排序,然后根据字符串中的字母对其进行排序。即:

Input:
1b
1a
Apple5
Apple1
Bapple2
Bapple5
2a
3

Output (in ASC):
1a
1b
Apple1
2a
Bapple2
3
Apple5
Bapple5

上面的排序与自然排序有点不同,因为它不根据字符串的长度进行排序。我有以下在 MariaDB 中有效的查询,但我正在寻找 MySQL 解决方案(请不要执行任何程序):

SELECT custom_id FROM test
ORDER BY CAST(REGEXP_SUBSTR(custom_id,'[0-9]+') AS UNSIGNED) ASC, custom_id ASC

【问题讨论】:

    标签: mysql sql regex mariadb


    【解决方案1】:

    0+custom_id 将给出前导数字的值。如果没有前导零,那么LENGTH(0+custom_id) 会说要去掉多少。使用合适的MID(...) 来获取之后的字符。

    【讨论】:

      猜你喜欢
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多