系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 数据库 > Mysql > 详细页面

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

时间:2023-03-17来源:系统城装机大师作者:佚名

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

数据样例

想要结果: 

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

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

使用SUBSTRING_INDEX 函数

sql :

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

结果:

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

sql :

1
2
3
4
5
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 表示有符号,可以表示小数
1
2
3
4
5
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:

1
2
3
4
5
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:

1
2
3
4
5
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的核心查询语句详解

    一、单表查询 1、排序 2、聚合函数 3、分组 4、limit 二、SQL约束 1、主键约束 2、非空约束 3、唯一约束 4、外键约束 5、默认值 三、多表查询 1、内连接 1)隐式内连接: 2)显式内连接: 2、外连接 1)左外连接 2)右外连接 四...

    2023-10-30

  • Mysql中如何删除表重复数据

    Mysql删除表重复数据 表里存在唯一主键 没有主键时删除重复数据 Mysql删除表中重复数据并保留一条 准备一张表 用的是mysql8 大家自行更改 创建表并添加四条相同的数据...

    2023-10-30

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载