首页 文章

mysql排序顺序,需要略有不同的结果

提问于
浏览
2

我有一个varchar列,我目前正在使用以下方法进行排序:ORDER BY(col_name 0)

此列包含数字和非数字,此排序的结果如下:

D3
D111
M123-M124
M136
4
9
10
25
37b
132
147-149
168b
168ca

这种排序对我们的应用程序来说几乎是完美的,但有一个例外:我们希望以字母开头的项目以数字开头的项目显示 . 这是理想的结果:

4
9
10
25
37b
132
147-149
168b
168ca
D3
D111
M123-M124
M136

我希望这可以在select语句中实现,而不需要在select之后再次遍历代码中的所有内容 . 有任何想法吗?

1 回答

  • 1

    你可以用这个:

    ORDER BY
      col_name regexp "^[^0-9]",
      case when col_name regexp "^[0-9]" then col_name + 0
           else mid(col_name, 2, length(col_name )-1) + 0 end,
      col_name
    

    这会将以数字开头的行放在顶部 . 如果col_name以数字开头,我按它的数值排序,如果不是,我将按照从第二个字符开始的字符串的数值进行排序 .

相关问题