Mysql - priotize字母排序数字

时间:2016-01-13 07:39:04

标签: mysql

我正在为新的货车系统创建一个拣货和包装清单,因为这条路线是最佳的,我需要按产品行所在的顺序对SKU清单进行分类。第一个字母或前两个字母表示我们仓库的位置。

所以从这样的排序中得到这个列表:

ORDER BY IF(sku RLIKE '^[a-z]', 1, 2), sku ASC;
+-------------+
| sku         |
+-------------+
| A3-1-1195   |
| A3-1-1195   |
| AA6-8-7117  |
| AB10-7-6405 |
| AB10-7-6405 |
| AB4-4-3487  |
| AB5-6-3460  |
| AB6-3-3445  |
| C1-8-5623   |
| K1-4-1835   |
| O7-7-4737   |
| O8-7-4344   |
| O8-7-4344   |
| U1-8-6664   |
+-------------+

编辑:

我理想的结果是,如果所有数字排序首先优先,然后是数字。这是捕获,但如果第二个字符是数字,则应按字母顺序排序。

+-------------+
| sku         |
+-------------+
| AB4-4-3487  |
| AB5-6-3460  |
| AB6-3-3445  |
| AB10-7-6405 |
| AB10-7-6405 |
| AA6-8-7117  |
| A3-1-1195   |
| A3-1-1195   |
| C1-8-5623   |
| K1-4-1835   |
| O7-7-4737   |
| O8-7-4344   |
| O8-7-4344   |
| U1-8-6664   |
+-------------+

1 个答案:

答案 0 :(得分:0)

您可以尝试将字段拆分为5个字段:  np =您的位置字段的大小  position = position char(s)  n1 =第一个数字  n2 =第二个数字  n3 =第三个数字

和sonrt与这些领域。 下面是一个没有表连接的示例(用于在查询浏览器中测试您的数据):

SELECT
    sku,
    MID(sku, 1, np) AS position,
    REPLACE(MID(sku, np+1, 2), '-', '') AS n1,
    REPLACE(MID(sku, np+3, 2), '-', '') AS n2,
    REPLACE(MID(sku, np+5, LENGTH(sku)), '-', '') AS n3
FROM (
    SELECT
        IF(MID(sku, 2, 1) REGEXP '[0-9]', 1, 2) AS np,
        s.*
    #subquery for this test
    FROM (
        SELECT 'A3-1-1195' AS sku
        UNION ALL SELECT 'A3-1-1195'
        UNION ALL SELECT 'AA6-8-7117'
        UNION ALL SELECT 'AB10-7-6405'
        UNION ALL SELECT 'AB10-7-6405'
        UNION ALL SELECT 'AB4-4-3487'
        UNION ALL SELECT 'AB5-6-3460'
        UNION ALL SELECT 'AB6-3-3445'
        UNION ALL SELECT 'C1-8-5623'
        UNION ALL SELECT 'K1-4-1835'
        UNION ALL SELECT 'O7-7-4737'
        UNION ALL SELECT 'O8-7-4344 '
        UNION ALL SELECT 'O8-7-4344'
        UNION ALL SELECT 'U1-8-6664') as s
) AS s
ORDER BY np DESC, position, n1, n2, n3