在字母数字字符串中对中间的三个数字排序,然后对最后三个数字进行排序


Sort middle and then last three numbers in alphanumeric string

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

Pattern: 1AB23CD456

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

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

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

电流输出:

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

预期输出:

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

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

我认为这应该有效:

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

这里有一种方法:

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;