给定一个名为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
有办法做到这一点吗?
答案 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);