mysql - MySQL 列设置为 varchar(255) 排序中的问题
问题描述
我有问题订购字段sID_contents_p
集以VARCHAR (255)
形成ttt
存储数据库的表MySql version 8.0.17
这是db-fiddle.com上的结果,它提供 MySQL 8
我需要这个回报,例如当sID_contents_p
包含 1
+----------------+-----+
| sID_contents_p | sID |
+----------------+-----+
| 1.1 | 1 |
| 1.2 | 2 |
| 1.3 | 3 |
| 1.4 | 4 |
| 1.5 | 5 |
| 1.6 | 6 |
| 1.7 | 7 |
| 1.8 | 8 |
| 1.9 | 9 |
| 1.10 | 10 |
| 1.11 | 11 |
| 1.12 | 12 |
| 1.13 | 13 |
| 1.14 | 14 |
| 1.15 | 15 |
| 1.16 | 16 |
| 1.17 | 17 |
| 1.18 | 18 |
| 1.19 | 19 |
| 1.20 | 89 |
+----------------+-----+
我已经尝试过这个查询,但返回的不是你想要的(见上文)....
mysql> SELECT
sID_contents_p,
sID
FROM
`ttt` WHERE SUBSTRING_INDEX(sID_contents_p,".",1) = 1
ORDER BY
sID_contents_p ASC;
+----------------+-----+
| sID_contents_p | sID |
+----------------+-----+
| 1.1 | 1 |
| 1.10 | 10 |
| 1.11 | 11 |
| 1.12 | 12 |
| 1.13 | 13 |
| 1.14 | 14 |
| 1.15 | 15 |
| 1.16 | 16 |
| 1.17 | 17 |
| 1.18 | 18 |
| 1.19 | 19 |
| 1.2 | 2 |
| 1.20 | 89 |
| 1.3 | 3 |
| 1.4 | 4 |
| 1.5 | 5 |
| 1.6 | 6 |
| 1.7 | 7 |
| 1.8 | 8 |
| 1.9 | 9 |
+----------------+-----+
20 rows in set (0.03 sec)
解决方案
问题是排序。你有一个字符串。一种方法是先按长度排序:
ORDER BY LENGTH(sID_contents_p), sID_contents_p
编辑:
如果第一个组件的长度也可以变化,则拆分值并转换为整数:
ORDER BY SUBSTRING_INDEX(sID_contents_p, '.', 1) + 0,
SUBSTRING_INDEX(sID_contents_p, '.', -1) + 0
推荐阅读
- c# - ASP.NET Core JSON 参数始终为空
- python - 比较 CSV 并使用 Python 从源和目标打印出不同的行
- sql-server - 在模型 Laravel 中使用 eloquent 在级联上删除
- android - 如何在蓝牙操作期间显示进度对话框
- flutter - getx:未找到 AddController。您需要调用 Get.put(AddController())
- performance - 使用不适合内存的 Set
- amazon-web-services - 在任务定义中使用 aws ssm 参数进行私有存储库身份验证的问题
- function - 在 Anylogic 中从 main 调用函数到模拟实验
- python - 合并具有重叠键的字典
- testing - 在测试中自定义进度报告屏幕?(开发运维)