经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MySQL » 查看文章
Mysql指定某个字符串字段前面几位排序查询方式
来源:jb51  时间:2023/3/17 8:57:13  对本文有异议

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

数据样例

想要结果: 

每个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的:

总结

好了,该篇到这里吧~

以上为个人经验,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  直通硅谷 怎么样 mac软件下载