Mysql怎么指定某个字符串字段前面几位排序查询


今天主机评测网小编给大家分享一下Mysql怎么指定某个字符串字段前面几位排序查询的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

指定某个字符串字段前面几位排序查询

数据样例

想要结果:

每个test_value 里面都包含 ORDER 关键字, 想根据这个关键字 前面的数字进行排序。

第一步(想办法先截取到 ORDER关键字前面的 值)

使用SUBSTRING_INDEX 函数

sql :

SELECTID,SUBSTRING_INDEX(test_value,"ORDER",1)ASNO,test_valueFROMtest

结果:

第二步,直接根据NO排序即可? (有坑)

sql :

select*FROM(SELECTID,SUBSTRING_INDEX(test_value,"ORDER",1)ASNO,test_valueFROMtest)tORDERBYt.NODESC

结果并不是我们想要的:

原因,之前讲过,字符串类型对应mysql排序,它是这样排的:

所以我们需要做转换成数字再排 。

第三步转换排序

第一种方案 :

使用CAST函数 转换类型

  • unsigned表示无符号,不能表示小数

  • signed表示有符号,可以表示小数

SELECT*FROM(SELECTID,SUBSTRING_INDEX(test_value,"ORDER",1)ASNO,test_valueFROMtest)tORDERBYCAST(t.NOASSIGNED)

结果OK的:

第二种方案

排序的字符串字段值后拼接 0 ,触发转换成数字

sql:

SELECT*FROM(SELECTID,SUBSTRING_INDEX(test_value,"ORDER",1)ASNO,test_valueFROMtest)tORDERBYt.NO+0

结果是OK的:

第三种方案:

CONVERT 函数 转换类型

  • unsigned表示无符号,不能表示小数

  • signed表示有符号,可以表示小数

sql:

SELECT*FROM(SELECTID,SUBSTRING_INDEX(test_value,"ORDER",1)ASNO,test_valueFROMtest)tORDERBYCONVERT(t.NO,SIGNED)

结果是OK的:

以上就是“Mysql怎么指定某个字符串字段前面几位排序查询”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注主机评测网行业资讯频道。


上一篇:SpringBoot?security默认拦截静态资源问题怎么解决

下一篇:maven私服搭建与使用的方法是什么


Copyright © 2002-2019 测速网 https://www.inhv.cn/ 皖ICP备2023010105号 城市 地区 街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!
热门搜索