2

给定一个名为 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

有没有办法做到这一点?

4

3 回答 3

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
于 2013-01-19T03:35:59.023 回答
1

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

然而,这个问题有一个有趣的答案:

这是一个快速的解决方案:

SELECT title
FROM table
ORDER BY LENGTH(title), title
于 2013-01-19T03:37:40.230 回答
0

尝试这个:

SELECT title 
FROM tablename 
ORDER BY SUBSTRING_INDEX(title, ' ', 1), 
         CAST(SUBSTRING_INDEX(title, ' ', -1)  AS UNSIGNED);
于 2013-01-19T03:55:11.907 回答