Mysql - priotize按数字排序的字母排序
问题描述:
我正在为新货车系统创建一个选择和包装列表,因为这条路线是最优的,我需要根据我们的产品行的顺序对SKU列表进行排序。第一个字母,或前两个字母表示仓库中的位置。Mysql - priotize按数字排序的字母排序
因此,有这个名单从排序是这样的:
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 |
+-------------+
答
你可以尝试你的领域分成5个领域: NP =您的位置字段 位置=位置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
感谢您的答复! :-)我已经更新了我的目标,以反映第二个字符应该在alfabetical desc中排序。如果一个数字。 –