【问题标题】:SQL Order by Letters Ascending and Numbers Descending Same ColumnSQL 按字母升序和数字在同一列降序排列
【发布时间】:2015-10-12 14:05:19
【问题描述】:

我正在尝试通过 MySQL 对列进行排序。排序应该是字母升序但数字降序。因为这可能有点令人困惑,这里举个例子:

要排序的数据:

Access 2003
Access 2007
Access 2013
Aliens
Excel 2003
Excel 2007
Everybody is happy
Powerpoint 2003
Powerpoint 2007

变成

Access 2013
Access 2007
Access 2003
Aliens
Excel 2007
Excel 2003
Everybody is happy
Powerpoint 2007
Powerpoint 2003

还要指出,有问题的字段将遵循与上述相同的模式:名称后跟一年,后跟空格。因此,如果无法使用内置的 MYSQL 函数。我们是否可以在第一个空格之后将此字段拆分为 2 个字段,并先按数字排序,然后按实际字段本身排序?

【问题讨论】:

  • 您应该更新您的 SQL 表结构以分别存储产品制造商、产品名称和版本,而不是使用肮脏的 SQL hack。
  • 是课程名称,不是产品。
  • 感谢您的澄清,但根据您的问题,我仍然建议将课程名称和年份/版本分开,对于不需要年份信息的课程,该字段留空。

标签: mysql sorting


【解决方案1】:

您可以使用此代码将您的字段分成两个字段,然后根据需要对它们进行排序。

SELECT
   SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 1), ' ', -1) AS string_name,
    TRIM( SUBSTR(fullname, LOCATE(' ', fullname)) ) AS numberpart
FROM table

【讨论】:

    猜你喜欢
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 2018-03-24
    相关资源
    最近更新 更多