按字母数字字符串排序中间,然后输入最后三个数字

时间:2014-04-20 15:35:12

标签: php mysql sorting

我有以下模式字符串存储在MySQL数据库中:

Pattern: 1AB23CD456

我想在排序最后三个数字之前对ABCD之间的中间数进行排序。

为了排序最后三个数字,我有以下代码

SELECT * FROM Table1 ORDER BY RIGHT(pattern,3)

当前输出:

+------------+
| 1aa22aa101 |   
| 1bb33bb101 |   
| 1cc44cc101 |   
| 1dd11dd101 |
+------------+

预期产出:

+------------+
| 1cc44cc101 |   
| 1bb33bb101 |   
| 1aa22aa101 |   
| 1dd11dd101 |
+------------+

注意:我想按DESC顺序对中间的两个数字进行排序。

2 个答案:

答案 0 :(得分:2)

我认为这应该有效:

SELECT * FROM Table1 ORDER BY substring(pattern,4,2) desc, RIGHT(pattern,3)

答案 1 :(得分:1)

以下是执行此操作的一种方法:

order by substring_index(col, 'ab', 2) + 0 DESC

这实际上并不是'cd'。相反,它只需要'ab'之后的数字。这是使用MySQL的一个称为静默转换的功能,它将字符串转换为数字而不会产生错误。它只是转换前导数字。

按此排序,然后按最后三个数字排序:

order by substring_index(col, 'ab', 2) + 0 DESC,
         right(col, 3) + 0;