mysql - 如何在sql中对带有文本的数字进行数字排序?
问题描述
我的表有字母数字值。我想先按数字订购它们,但它不起作用。
下面是示例表,表名被称为method_1
:
id | code_name |
4 200 a
1 100 b
3 100-1 c
9 100-1/1 d
11 100-1/1/1 e
12 100-1/1/10 f
2 100-1/1/11 g
13 100-1/1/3 h
14 100-2 i
20 100-1/2 j
32 100-1/2/1 k
我使用的是 MYSQL 查询浏览器版本 1.2.11,我的 SQL 查询是SELECT * FROM method_1 order by code_name
,但它无法正确排序数字。而且我也在用这个方法SELECT * FROM method_1 order by length(code_name), code_name
,还是不行
实际上我希望预期的结果如下表所示:
id | code_name |
1 100 b
3 100-1 c
9 100-1/1 d
11 100-1/1/1 e
13 100-1/1/3 h
12 100-1/1/10 f
2 100-1/1/11 g
20 100-1/2 j
32 100-1/2/1 k
14 100-2 i
4 200 a
使用 jarlh 答案
解决方案
WITH
cte AS (SELECT id,
code_name,
CONCAT('[', REGEXP_REPLACE(SUBSTRING_INDEX(code_name, ' ', 1), '[\-\/ ]', ','), ']') code,
SUBSTRING_INDEX(code_name, ' ', -1) name
FROM test)
SELECT id,
code_name
FROM cte
ORDER BY code->>"$[0]" + 0,
code->>"$[1]" + 0,
code->>"$[2]" + 0,
code->>"$[3]" + 0,
name;
推荐阅读
- html - 如何修复列高以便它们根据内容显示?
- docker - 如何从 docker-compose 获取 docker 生成的 ip 端口
- pddl - 如何解决 pddl 域文件中的“未声明的谓词:<”错误?
- php - 我无法运行 phpmyadmin
- c++ - 如何在 C++ 中将多个不同类型的变量打印到控制台
- json - 无法解析 JMESPATH 的 json 输出
- logging - 聚合用户访问kibana中的所有url路径号
- for-loop - 列表上的两个嵌套 for 循环
- c# - 如何使用查询返回另一个模型?
- python - 如何在python中使用这种样式格式的文本打印花括号