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

目录
- 指定某个字符串字段前面几位排序查询
- 数据样例
- 第一步(想办法先截取到 ORDER关键字前面的 值)
- 第二步,直接根据NO排序即可? (有坑)
- 第三步转换排序
- 总结
指定某个字符串字段前面几位排序查询
数据样例
想要结果:
每个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的:
总结
好了,该篇到这里吧~
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
MySQL字符串前缀索引使用
目录 1. 前缀索引与全部索引概念 2. 前缀索引与全部索引数据结构 3. 前缀索引与全部索引引执行流程 4. 前缀索引长度如何取舍 5. 前缀索引对覆盖索引的影响 6. 其他解决方案 7. 梳理总结 1. 前缀索引与全部索引概念 怎么给字符串字段加索引?现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是我们今天要讨论的问题. 假设,你现在维护一个支持邮箱登录的系统,用户表是这么定义的 create table SUser( ID bigint unsigned pri
-
mysql实现将字符串字段转为数字排序或比大小
目录 将字符串字段转为数字排序或比大小 排序 比大小 sql语句字符串如何比较大小 解决方法 将字符串字段转为数字排序或比大小 mysql里面有个坑就是,有时按照某个字段的大小排序(或是比大小)发现排序有点错乱.后来才发现,是我们想当然地把对字符串字段当成数字并按照其大小排序(或是比大小),结果肯定不会是你想要的结果. 这时候需要把字符串转成数字再排序. 最简单的办法就是在字段后面加上+0 如把'123'转成数字123(以下例子全为亲测): 排序 例: 方法一: ORDER BY '123'+0
-
MySQL关于字符串中数字排序的问题分析
本文实例讲述了MySQL关于字符串中数字排序的问题.分享给大家供大家参考,具体如下: MySQL字符串相信大家都不陌生,在MySQL字符串排序时经常会遇到一些问题,比如下面要介绍的这个 今天解决了一个关于MySQL字符串排序的很奇怪的问题,在数据里面定义的是varchar类型,实际存放的是Int类型的数据,按一下查询语句进行排序: 将字段*1或者+0可以将MySQL字符串字段按数值排序 如: select * from table where 1 order by id*1 desc; 或者 s
-
MySQL怎么给字符串字段加索引
假设,你现在维护一个支持邮箱登录的系统,用户表是这么定义的: create table SUser( ID bigint unsigned primary key, email varchar(64), ... )engine=innodb; 由于要使用邮箱登录,所以业务代码中一定会出现类似于这样的语句: select f1, f2 from SUser where email='xxx'; 如果 email 这个字段上没有索引,那么这个语句就只能做全表扫描. 1)那我可以在邮箱地址这个
-
MySQL对JSON类型字段数据进行提取和查询的实现
目录 前言 1. 问题现象 2. 解决方案 3. JSON数据查询 3.1 一般基础查询操作 3.2 一般函数查询操作 4. JSON数据新增更新删除 前言 昨天上线后通过系统报警发现了一个bug,于是紧急进行了回滚操作,但是期间有用户下单,数据产生了影响,因此需要排查影响了哪些订单,并对数据进行修复. 1. 问题现象 由于bug导致了订单表的customer_extra_info字段的hasFreightInsurance误更新成了“是”,因此需要查询回滚前一共有多少被误更新为“是”的订单,如
-
mysql指定某行或者某列的排序实现方法
方法: 通过desc: 都无法实现: 方法一: select sp.productid,sp.productname,ss.sku from sp_product sp inner join sku_skus ss on sp.productid=ss.productid where sp.productname='力士恒久嫩肤娇肤香皂115g' or sp.productname='佳洁士(Crest) 绿茶薄荷牙膏180克' or sp.productname='心味果园 兰花豆 190g/
-
批量替换 MySQL 指定字段中的字符串
批量替换的具体语法是: 复制代码 代码如下: UPDATE 表名 SET 指定字段 = replace(指定字段, '要替换的字符串', '想要的字符串') WHERE 条件; 如果你想把 article 表中 ID 小于5000的记录,content 字段中"解决"替换成"解放",那么语法就是: 复制代码 代码如下: UPDATE article SET content = replace(content, '解决', '解放') WHERE ID<5000
-
Mysql字符串字段判断是否包含某个字符串的2种方法
假设有个表: 复制代码 代码如下: CREATE TABLE users(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),user_name VARCHAR(20) NOT NULL,emails VARCHAR(50) NOT NULL); 初始化表,并添加些记录. 复制代码 代码如下: truncate table users INSERT INTO users(user_name, emails) VALUES('小张','a@emai
-
mysql 列转行,合并字段的方法(必看)
数据表: 列转行:利用max(case when then) max---聚合函数 取最大值 (case course when '语文' then score else 0 end) ---判断 as 语文---别名作为列名 SELECT `name`, MAX( CASE WHEN course='语文' THEN score END ) AS 语文, MAX( CASE WHEN course='数学' THEN score END ) AS 数学, MAX( CASE WHEN cour
-
MySQL日期及时间字段的查询
目录 1.日期和时间类型概览 2.日期和时间相关函数 3.日期和时间字段的规范查询 前言: 在项目开发中,一些业务表字段经常使用日期和时间类型,而且后续还会牵涉到这类字段的查询.关于日期及时间的查询等各类需求也很多,本篇文章简单讲讲日期及时间字段的规范化查询方法. 1.日期和时间类型概览 MySQL支持的日期和时间类型有 DATETIME.TIMESTAMP.DATE.TIME.YEAR , 几种类型比较如下: 涉及到日期和时间字段类型选择时,根据存储需求选择合适的类型即可. 2.日期和时间相关
-
MySql中的longtext字段的返回问题及解决
目录 MySql中longtext字段的返回 如下图所示 解决方法 Mysql中Text字段的范围 汉字在utf8mb4中占用几个字符 MySql中longtext字段的返回 最近开发中用到了longtext这种字段.在mysql中该字段的最大长度为4G 如下图所示 开发中遇到的一个问题就是.例如有个article表,然后我们的页面要将数据以列表的形式展示到前端(只显示几个字段,如作者,标题等等,例如放到table中显示多条记录),但是是将该表中的所有信息都查出来,然后当用户点击某条记录的时候,
-
MySql如何去除字符串前缀,两边,后缀
目录 MySql去除字符串前缀,两边,后缀 效果 语句 Trim 函数 MySql字符串处理常用方法 1.在mybatis的Mapper.xml的sql语句中 2.trim()的使用 3.字符串拆分:SUBSTRING_INDEX(str, delim, count) 4.替换函数:replace( str, from_str, to_str) 5.获取字符串长度:LENGTH( str ) MySql去除字符串前缀,两边,后缀 效果 语句 select supplierNum, trim(LE
随机推荐
- 使用angularjs创建简单表格
- jQuery抛物线运动实现方法(附完整demo源码下载)
- 浅析直接插入排序与折半插入排序
- Python 文件操作的详解及实例
- .Net 下区别使用 ByRef/ByVal 的重要性 分享
- PHP统计目录大小的自定义函数分享
- javascript密码强度校验代码(两种方法)
- Python实现单词翻译功能
- Sortable.js拖拽排序使用方法解析
- Android编程之蓝牙测试实例
- 配置Mysql主从服务实现实例
- 用Docker作为PaaS的替代方案是否完美无缺
- Ajax实现模拟关键字智能匹配搜索效果
- js下弹出窗口的变通
- 在ASP里面创建GUID
- 简单判断MSSQL数据库版本(2000或者2005)
- jQuery封装的获取Url中的Get参数示例
- 关于Blog顶部的滚动导航条代码
- MSN8.0酷实用技巧让你成为聊天高手
- Android颜色配置器配置方法
其他
- 怎样在created中将数据保存到vue实例中
- 前端vue工程引入static静态资源跨域
- inet_pton转换的值为0
- sql2008转换sql2000
- Zset元素从大到小显示 java怎么写
- C#中怎么定义常量3.1415926
- JavaScript聊天室
- springboot 微信授权登录
- 微信小程序input组件输入密码不会自动确认
- idea springboot maven打不进yml
- java定时增量同步
- component 组件singer
- three.js 3D看房 点击
- python可视化 最佳路径
- java 怎么算地铁最优线路
- vue如何将data中的地址传给style中
- webpack 打包静态资源 忽略
- redis zset 如何做多个排行榜
- nginx 转socket
- 微信小程序获取天气数据