我有以下模式字符串存储在MySQL数据库中:
Pattern: 1AB23CD456
我想在排序最后三个数字之前对AB
和CD
之间的中间数进行排序。
为了排序最后三个数字,我有以下代码
SELECT * FROM Table1 ORDER BY RIGHT(pattern,3)
当前输出:
+------------+
| 1aa22aa101 |
| 1bb33bb101 |
| 1cc44cc101 |
| 1dd11dd101 |
+------------+
预期产出:
+------------+
| 1cc44cc101 |
| 1bb33bb101 |
| 1aa22aa101 |
| 1dd11dd101 |
+------------+
注意:我想按DESC顺序对中间的两个数字进行排序。
答案 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;