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索引b+树和b树(MySQL使用B+Tree当索引的优势有哪些)
- mysql乐观锁一定比悲观锁性能高(mysql居然还能实现分布式锁的方法)
- mysql锁机制图解(详解mysql 中的锁结构)
- mysql left join索引怎么使用(详解mysql 使用left join添加where条件的问题分析)
- 最新版MySQL 8.0.22下载安装超详细教程(Windows 64位)(最新版MySQL 8.0.22下载安装超详细教程Windows 64位)
- mysql数据库与表的基本操作总结(Mysql、Oracle中常用的多表修改语句总结)
- mysql水平拓展的瓶颈(MySQL令人大跌眼镜的隐式转换)
- mysql定期备份(Mysql5.7定时备份的实现)
- mysql8.0.21的安装步骤(mysql8.0.23 msi安装超详细教程)
- mysql的事务隔离级别怎么实现(mysql、oracle默认事务隔离级别的说明)
- mysql常见错误分析(分析MySQL抛出异常的几种常见解决方式)
- mysql重新安装失败
- docker部署mysql并且自动启动(Docker 部署 Mysql8.0的方法示例)
- mysql完整教程(MySql新手入门的基本操作汇总)
- MySQL中NULL和空值的区别
- mysql创建表存在哪里(MySQL的表空间是什么)
- 职场人改不掉这4个习惯,只会越混越穷,一辈子也翻不了身(职场人改不掉这4个习惯)
- 华为 联想等46家公司笔试面试题,涉及各行各业,建议收藏(联想等46家公司笔试面试题)
- ()
- ()
- 800壮士拼死拖住30万日军 八佰 的真实历史,誓与阵地共存亡(800壮士拼死拖住30万日军)
- 演员陈创,火于 哮天犬 ,颠峰于 福贵 ,现状却令人唏嘘(演员陈创火于哮天犬)
热门推荐
- react加载优化(React星星评分组件的实现)
- dede织梦cms安装教程(开源织梦dedecms快速搬家图文教程)
- dedecms使用方法(Dedecms织梦CMS搜索页面调用全站最新文章的方法)
- python中的pass是干嘛的(总结python中pass的作用)
- 阿里云ecs 更换操作系统(为什么禁用阿里云ECS的内网后不能使用云监控?)
- vue滚动条滚动事件(vue实现一个滚动条样式)
- ConcurrentDictionary与Dictionary的区别
- Extjs menu菜单的简单用法
- vuecli配置环境变量(Vue CLI中模式与环境变量的深入详解)
- linux基础教程磁盘配额的设计(WDCP Linux服务器磁盘爆满的处理方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9