目录指定某个字符串字段前面几位排序查询数据样例第一步(想办法先截取到 ORDER关键字前面的 值)第二步,直接根据NO排序即可? (有坑)第三步转换排序 总结指定某个字符串字段前面几位排序查询 数据样例 想要
想要结果:
每个test_value 里面都包含 ORDER 关键字, 想根据这个关键字 前面的数字进行排序。
使用SUBSTRING_INDEX 函数
sql :
SELECT ID,SUBSTRING_INDEX(test_value,"ORDER",1) AS NO, test_value FROM test
结果:
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的:
好了,该篇到这里吧~
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
--结束END--
本文标题: Mysql指定某个字符串字段前面几位排序查询方式
本文链接: https://lsjlt.com/news/200029.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0