mysql字符串截取字段(MySQL如何从不固定位置提取字符串元素详解)
类别:数据库 浏览量:885
时间:2021-10-26 11:44:16 mysql字符串截取字段
MySQL如何从不固定位置提取字符串元素详解前言
备注:测试数据库版本为MySQL 8.0
测试数据:
|
create table zqs(id int ,str varchar (1000)); insert into zqs(id,str) values (1, '【京东】abc【中国电信】' ); insert into zqs(id,str) values (1, '【京东】abc【中国电信】def' ); insert into zqs(id,str) values (1, '****【京东】abc【中国电信】def' ); insert into zqs(id,str) values (1, '****【京东】abc' ); insert into zqs(id,str) values (1, '【京东】abc【中国电信】【中国联通】' ); |
一.需求
经常遇到短信类似的需求,需要提取短信的标记信息,但是可能会存在多个短信标记
此例假设最多有3个标签,需要输出如下:
|
mysql> select * from zqs; ±-----±----------------------------------------------------+ | id | str | ±-----±----------------------------------------------------+ | 1 | 【京东】abc【中国电信】 | | 1 | 【京东】abc【中国电信】def | | 1 | ****【京东】abc【中国电信】def | | 1 | ****【京东】abc | | 1 | 【京东】abc【中国电信】【中国联通】 | ±-----±----------------------------------------------------+ |
要求输出如下:
|
±-------------±-------------------±-------------------+ | first_val | first_va2 | first_va3 | ±-------------±-------------------±-------------------+ | 【京东】 | 【中国电信】 | | | 【京东】 | 【中国电信】 | | | 【京东】 | 【中国电信】 | | | 【京东】 | | | | 【京东】 | 【中国电信】 | 【中国联通】 | ±-------------±-------------------±-------------------+ |
二.解决方案
Oracle 字符串截取函数 substr和instr配合使用即可,但是MySQL的instr函数是弱于Oracle的instr函数。
此时需要借助MySQL的正则表达式 regexp_instr函数以及substr函数配合
|
select substr(str, regexp_instr(str, '【' ,1,1), regexp_instr(str, '】' ,1,1) - regexp_instr(str, '【' ,1,1) + 1 ) first_val, substr(str, regexp_instr(str, '【' ,1,2), regexp_instr(str, '】' ,1,2) - regexp_instr(str, '【' ,1,2) + 1) first_va2, substr(str, regexp_instr(str, '【' ,1,3), regexp_instr(str, '】' ,1,3) - regexp_instr(str, '【' ,1,3) + 1) first_va3 from zqs; |
测试记录:
|
mysql> select substr(str, -> regexp_instr(str, '【' ,1,1), -> regexp_instr(str, '】' ,1,1) - regexp_instr(str, '【' ,1,1) + 1 ) first_val, -> substr(str, -> regexp_instr(str, '【' ,1,2), -> regexp_instr(str, '】' ,1,2) - regexp_instr(str, '【' ,1,2) + 1) first_va2, -> substr(str, -> regexp_instr(str, '【' ,1,3), -> regexp_instr(str, '】' ,1,3) - regexp_instr(str, '【' ,1,3) + 1) first_va3 -> from zqs; +--------------+--------------------+--------------------+ | first_val | first_va2 | first_va3 | +--------------+--------------------+--------------------+ | 【京东】 | 【中国电信】 | | | 【京东】 | 【中国电信】 | | | 【京东】 | 【中国电信】 | | | 【京东】 | | | | 【京东】 | 【中国电信】 | 【中国联通】 | +--------------+--------------------+--------------------+ 5 rows in set (0.00 sec) |
总结
到此这篇关于MySQL如何从不固定位置提取字符串元素的文章就介绍到这了,更多相关MySQL提取字符串元素内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
原文链接:https://blog.csdn.net/u010520724/article/details/114261191
您可能感兴趣
- mysql给字段加默认值(MySQL 如何处理隐式默认值)
- mysql数据库基本使用方法(详解MySQL 数据库范式)
- mysql出现锁表的原因(导致MySQL做全表扫描的几种情况)
- mysql8修改默认端口(MySQL 8.0新特性 — 管理端口的使用简介)
- mysql的存储性能优化(MySQL的查询缓存和Buffer Pool)
- mysql长连接释放和不释放的问题(解决MySQL存储时间出现不一致的问题)
- navicat连接mysql报1045(解决Navicat for MySQL 连接 MySQL 报2005错误的问题)
- 怎么查看mysql计划执行情况(详解 MySQL 执行计划)
- mysql分区表的优缺点(MySQL数据表分区策略及优缺点分析)
- mysql连接navicat报错1045(Navicat 连接MySQL8.0.11出现2059错误)
- mysql主从复制步骤(MySQL8 主从复制踩坑指南)
- mysql binlog日志位置(开启MySQL的binlog日志的方法步骤)
- 如何在mysql中批量插入数据(MySQL如何快速批量插入1000w条数据)
- mysql 内置函数
- mysql8.0.26安装教程(mysql 8.0.22压缩包完整安装与配置教程图解亲测安装有效)
- idea配置mysql最大连接数(IDEA连接不上MySQL端口号占用的解决)
- 休闲VS新古典 办公家居简约设计(办公家居简约设计)
- 15个新成 园 位置公布 深圳龙岗2022年共建花园建设又有大动作(15个新成园位置公布)
- 记者手记 书记带我去 巡街(记者手记书记带我去)
- 富士胶片集团将向土耳其东南部地震灾民捐赠5000万日元 | 美通社(富士胶片集团将向土耳其东南部地震灾民捐赠5000万日元)
- 二次创业 的富士胶片,在进博会上首次展示完成转型后的全线医疗产品(二次创业的富士胶片)
- 富士胶片 中国 我们对上海的信心没有任何改变(富士胶片中国)
热门推荐
- html5应用的几个建议
- python selenium用法详解(python selenium执行所有测试用例并生成报告的方法)
- html5文档的基本结构及必要的注释(关于HTML5+ API plusready的兼容问题)
- 如何用微信公众号发送信息(微信公众号之主动给用户发送消息功能)
- vue怎么实现拖动(Vue拖动截图功能的简单实现方法)
- 百度免费翻译接口(基于python实现百度翻译功能)
- 谷歌云服务账号详解(谷歌云服务器一年到期后,怎么继续免费使用?)
- python在mysql创建数据库(python3对接mysql数据库实例详解)
- serv文件怎么复制到ftp服务器上(用Serv-U架设FTP服务器的方法与设置方法)
- mysql删除表内所有数据(mysql 大表批量删除大量数据的实现方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9