时间:2023-03-17来源:系统城装机大师作者:佚名
想要结果:
每个test_value 里面都包含 ORDER 关键字, 想根据这个关键字 前面的数字进行排序。
使用SUBSTRING_INDEX 函数
sql :
1 | SELECT ID,SUBSTRING_INDEX(test_value, "ORDER" ,1) AS NO , test_value FROM test |
结果:
sql :
1 2 3 4 5 |
select * FROM ( SELECT ID,SUBSTRING_INDEX(test_value, "ORDER" ,1) AS NO , test_value FROM test )t ORDER BY t. NO DESC |
结果并不是我们想要的:
原因,之前讲过,字符串类型对应mysql排序,它是这样排的:
所以我们需要做转换成数字再排 。
第一种方案 :
使用 CAST函数 转换类型
unsigned
表示无符号,不能表示小数signed
表示有符号,可以表示小数1 2 3 4 5 |
SELECT * FROM ( SELECT ID,SUBSTRING_INDEX(test_value, "ORDER" ,1) AS NO , test_value FROM test )t ORDER BY CAST (t. NO AS SIGNED) |
结果OK的:
第二种方案
排序的字符串字段值后拼接 0 ,触发转换成数字
sql:
1 2 3 4 5 |
SELECT * FROM ( SELECT ID,SUBSTRING_INDEX(test_value, "ORDER" ,1) AS NO , test_value FROM test )t ORDER BY t. NO +0 |
结果是OK的:
第三种方案:
CONVERT 函数 转换类型
unsigned
表示无符号,不能表示小数signed
表示有符号,可以表示小数sql:
1 2 3 4 5 |
SELECT * FROM ( SELECT ID,SUBSTRING_INDEX(test_value, "ORDER" ,1) AS NO , test_value FROM test )t ORDER BY CONVERT (t. NO ,SIGNED) |
结果是OK的:
好了,该篇到这里吧~
2023-03-17
mariadb集群搭建---Galera Cluster+ProxySQL教程2023-03-15
Mysql存储二进制对象数据问题2023-03-15
MySQL5.7升级MySQL8.0的完整卸载与安装及连接Navicat的步骤打开MySQL 8.0 Command Line Client命令框输入密码后命令框闪退 一、输入密码错误 二、MySQL服务没有启动 三、my.ini文件缺失...
2023-03-15
1.关闭mysql服务 2.跳过权限验证 3.以管理员打开另一个cmd窗口,直接输入mysql(刚才的不要关闭) 4.修改密码 5.刷新mysql权限,再次执行命令 6.关闭第一次打开的窗口,然后输入quit 7.重新启动mysql,并登录测试...
2023-03-15