【问题标题】:Sort middle and then last three numbers in alphanumeric string对字母数字字符串中的中间和最后三个数字进行排序
【发布时间】:2014-04-20 23:46:13
【问题描述】:

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

Pattern: 1AB23CD456

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

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

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

当前输出:

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

预期输出:

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

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

【问题讨论】:

  • ab 和 cd 出现的位置是否相同?
  • 不,ab和cd可以是任意字符组合
  • 您能否更新您的样本数据集以显示不同的出现,因为现在它看起来与常量的 ab 和 cd 组合相同
  • ab 和 cd 之间是否总是两位数?
  • 数字和字符在模式中的位置相同每个字符可以是:a-z 每个数字可以来自:0-9

标签: php mysql sorting


【解决方案1】:

我认为这应该可行:

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

【讨论】:

    【解决方案2】:

    这是一种方法:

    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;
    

    【讨论】:

    • abcd 可以是任意两个字符的组合
    • @hsaka:你的问题不清楚,我只是想警告这种歧义,答案仍然“正确”:)
    猜你喜欢
    • 1970-01-01
    • 2020-11-13
    • 2013-06-05
    • 2016-10-28
    • 2012-08-29
    • 1970-01-01
    • 2021-09-19
    • 2021-09-17
    相关资源
    最近更新 更多