gpt4 book ai didi

包含由 "x"分隔的两个数字的 MySQL 排序值

转载 作者:行者123 更新时间:2023-11-29 02:22:01 27 4
gpt4 key购买 nike

我有一些由十进制数字和字母组成的值:

2mm
3x4mm
2.5x5mm
1.7x6mm
1.7x9mm
1.6x5mm
3mm
5mm
3.5x5mm
3.5x8mm
10x7mm

注意:x - 表示字母表 x。我想对它们进行升序排序,以便结果如下所示:

1.6x5mm
1.7x6mm
1.7x9mm
2mm
2.5x5mm
3mm
3x4mm
3.5x5mm
3.5x8mm
5mm
10x7mm

所以我需要十进制和字母数字排序。

最佳答案

您需要使用 MySQL string functions .例如,您可以使用 LOCATESUBSTRING_INDEX 函数来分隔两个数字:

/*
CREATE TABLE test (value VARCHAR(100) DEFAULT NULL);
INSERT INTO test (value) VALUES
('2mm'),
('3x4mm'),
('2.5x5mm'),
('1.7x6mm'),
('1.7x9mm'),
('1.6x5mm'),
('3mm'),
('5mm'),
('3.5x5mm'),
('3.5x8mm'),
('10x7mm');
*/

SELECT
value,
1 * CASE WHEN LOCATE('x', value) > 0 THEN SUBSTRING_INDEX(value, 'x', 1) ELSE SUBSTRING_INDEX(value, 'mm', 1) END AS x,
1 * CASE WHEN LOCATE('x', value) > 0 THEN SUBSTRING_INDEX(SUBSTRING_INDEX(value, 'x', -1), 'mm', 1) ELSE NULL END AS y
FROM test
ORDER BY x, y

为了说明,我将计算放在 select 子句中而不是 order by 子句中。结果:

+---------+------+------+
| value | x | y |
+---------+------+------+
| 1.6x5mm | 1.6 | 5 |
| 1.7x6mm | 1.7 | 6 |
| 1.7x9mm | 1.7 | 9 |
| 2mm | 2 | NULL |
| 2.5x5mm | 2.5 | 5 |
| 3mm | 3 | NULL |
| 3x4mm | 3 | 4 |
| 3.5x5mm | 3.5 | 5 |
| 3.5x8mm | 3.5 | 8 |
| 5mm | 5 | NULL |
| 10x7mm | 10 | 7 |
+---------+------+------+

关于包含由 "x"分隔的两个数字的 MySQL 排序值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30167584/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com