需要帮助在mysql中排序

Nav*_*air 5 mysql sql-order-by

嗨,我想排序一个表.该字段包含数字,字母和带字母的数字,即,

1
2
1a
11a
a
6a
b

我想对此进行排序,

1
1a
2
6a
11a
a
b

我的代码是,

SELECT * FROM t ORDER BY CAST(st AS SIGNED), st 
但结果是,

a
b
1
1a
2
6a
11a

我在这个网址中找到了这段代码

"http://www.mpopp.net/2006/06/sorting-of-numeric-values-mixed-with-alphanumeric-values/"
有人请帮助我

Joa*_*son 5

这将执行您所需的排序顺序,即使存在0于表中;

SELECT * FROM t 
ORDER BY 
  st REGEXP '^[[:alpha:]].*', 
  st+0, 
  st
Run Code Online (Sandbox Code Playgroud)

一个要测试的SQLfiddle.

  • 作为第一个排序标准,它会对任何以字母开头的内容进行排序.这就是正则表达式的作用.
  • 作为第二个排序标准,它按字符串开头的数值排序(st+0将0添加到字符串开头的数字部分并返回一个int)
  • 作为最后的手段,它按字符串本身排序,以按字母顺序排列.