服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - Mysql指定某个字符串字段前面几位排序查询方式

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

2023-03-17 15:21小目标青年 Mysql

这篇文章主要介绍了Mysql指定某个字符串字段前面几位排序查询方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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

 

数据样例

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

想要结果:

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

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

使用SUBSTRING_INDEX 函数

sql :

  1. SELECT ID,SUBSTRING_INDEX(test_value,"ORDER",1) AS NO, test_value  FROM  test

结果:

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

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

sql :

  1. select * FROM (
  2.  
  3. SELECT ID,SUBSTRING_INDEX(test_value,"ORDER",1) AS NO, test_value  FROM  test
  4.  
  5. )t  ORDER BY t.NO DESC 

结果并不是我们想要的:

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

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

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

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

第三步转换排序

第一种方案 :

使用  CAST函数 转换类型

  • unsigned 表示无符号,不能表示小数
  • signed 表示有符号,可以表示小数
  1. SELECT * FROM (
  2.  
  3. SELECT ID,SUBSTRING_INDEX(test_value,"ORDER",1) AS NO, test_value  FROM  test
  4.  
  5. )t  ORDER BY  CAST(t.NO AS SIGNED) 

结果OK的:

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

第二种方案

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

sql:

  1. SELECT * FROM (
  2.  
  3. SELECT ID,SUBSTRING_INDEX(test_value,"ORDER",1) AS NO, test_value  FROM  test
  4.  
  5. )t  ORDER BY  t.NO+0

结果是OK的:

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

第三种方案:

CONVERT 函数 转换类型

  • unsigned 表示无符号,不能表示小数
  • signed 表示有符号,可以表示小数

sql:

  1. SELECT * FROM (
  2.  
  3. SELECT ID,SUBSTRING_INDEX(test_value,"ORDER",1) AS NO, test_value  FROM  test
  4.  
  5. )t  ORDER BY  CONVERT(t.NO,SIGNED)

结果是OK的:

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

总结

好了,该篇到这里吧~

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

原文链接:https://blog.csdn.net/qq_35387940/article/details/128327290

延伸 · 阅读

精彩推荐