如何使用项目 ID 修复订购方式



>我有一个包含项目 id 的表一些例子是:

1
1:3
2:1
2:2
3
3:1
12:2
21:2

我希望它们按列出的方式排序^MYSQL按以下顺序对它们进行排序:

1
1:3
12:2
2:1
2:2
21:2
3
3:1

有人知道如何解决这个问题吗?

使用SUBSTRING_INDEX()可以:

SELECT *
FROM TestTable
ORDER BY CAST(SUBSTRING_INDEX(ColumnVal, ':', 1) AS UNSIGNED),
         CAST(SUBSTRING_INDEX(ColumnVal, ':', 2) AS UNSIGNED)

在数据库<>小提琴上演示

以另一种方式使用POSITION()

SELECT *
FROM TestTable
ORDER BY CAST(SUBSTRING_INDEX(ColumnVal, ':', 2) AS UNSIGNED),
         POSITION(":" IN ColumnVal),
         SUBSTRING(ColumnVal, POSITION(":" IN ColumnVal) + 1, LENGTH(ColumnVal))

在数据库<>小提琴上演示

SELECT _table.*
#      , RPAD(SUBSTRING_INDEX(_table._col, ':', 1), 3, 0)
FROM
    (
     SELECT
         CAST('1' AS CHAR) AS _col
     UNION
     SELECT
         '1:3'
     UNION
     SELECT
         '2:1'
     UNION
     SELECT
         '2:2'
     UNION
     SELECT
         '3'
     UNION
     SELECT
         '3:1'
     UNION
     SELECT
         '12:2'
     UNION
     SELECT
         '21:2') _table
ORDER BY RPAD(SUBSTRING_INDEX(_table._col, ':', 1), 3, 0),
    RPAD(SUBSTRING_INDEX(_table._col, ':', 2), 5, 0)
;
您可以使用

ABS()CAST(),如果满足以下条件:

SELECT * FROM table ORDER BY ABS(column);
SELECT * FROM table ORDER BY CAST(column as DECIMAL);

相关内容

最新更新