给定一个名为 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
有没有办法做到这一点?
给定一个名为 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
有没有办法做到这一点?
尝试这个:
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
这称为自然顺序排序。不幸的是,MySQL 没有内置这样的排序算法,所以你最可靠的选择是创建一个 UDF 来为你做这件事。
然而,这个问题有一个有趣的答案:
这是一个快速的解决方案:
SELECT title FROM table ORDER BY LENGTH(title), title
尝试这个:
SELECT title
FROM tablename
ORDER BY SUBSTRING_INDEX(title, ' ', 1),
CAST(SUBSTRING_INDEX(title, ' ', -1) AS UNSIGNED);