MySQL命令varchar alpha-numerically

时间:2013-01-19 03:32:55

标签: mysql sql select sql-order-by

给定一个名为title的VARCHAR列,其中包含以下SELECT title FROM table ORDER BY title个结果:

Alpha 11
Alpha 2
Beta 1
Beta 11
Beta 2

我希望这是

的“正确”顺序
Alpha 2
Alpha 11
Beta 1
Beta 2
Beta 11

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:2)

试试这个:

SELECT title ,
  SUBSTRING_INDEX(title, '', 1) as title_str,
  SUBSTRING_INDEX(title, ' ', -1) + 0 as title_num
FROM table 
ORDER BY title_str, 
  title_num

答案 1 :(得分:1)

这称为自然顺序排序。不幸的是,MySQL没有内置的这种排序算法,所以你最可靠的选择就是创建一个UDF来为你做。

然而,this question有一个有趣的答案:

  

这是一个快速解决方案:

SELECT title
FROM table
ORDER BY LENGTH(title), title

答案 2 :(得分:0)

试试这个:

SELECT title 
FROM tablename 
ORDER BY SUBSTRING_INDEX(title, ' ', 1), 
         CAST(SUBSTRING_INDEX(title, ' ', -1)  AS UNSIGNED);