Mysql指定某个字符串字段前面几位排序查询方式
指定某个字符串字段前面几位排序查询
数据样例

想要结果:
每个test_value 里面都包含 ORDER 关键字, 想根据这个关键字 前面的数字进行排序。
第一步(想办法先截取到 ORDER关键字前面的 值)
使用SUBSTRING_INDEX 函数
sql :
SELECT ID,SUBSTRING_INDEX(test_value,"ORDER",1) AS NO, test_value FROM test
结果:

第二步,直接根据NO排序即可? (有坑)
sql :
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表示有符号,可以表示小数
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:
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:
SELECT * FROM ( SELECT ID,SUBSTRING_INDEX(test_value,"ORDER",1) AS NO, test_value FROM test )t ORDER BY CONVERT(t.NO,SIGNED)
结果是OK的:

总结
好了,该篇到这里吧~
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Mysql报错1292:Incorrect datetime value for 
本文主要介绍了Mysql报错1292:Incorrect datetime value for column create_time at row 1 解决方案,1292 是指插入或更新操作时,日期或时间值不正确引起的错误,下面就来介绍一下2024-02-02
Centos7 移动mysql5.7.19 数据存储位置的操作方法
这篇文章主要介绍了Centos7 移动mysql5.7.19 数据存储位置的实现方法,需要的朋友可以参考下2017-10-10
浅谈MySQL安装starting the server失败的解决办法
如果电脑是不是第一次安装MySQL,一般会出现报错情况,starting the server失败,通常是因为上次安装的该软件未清除干净,本文就详细的介绍一下解决方法,感兴趣的可以了解一下2021-09-09


最新评论