MySQL如何从不固定位置提取字符串元素详解
前言
备注:测试数据库版本为MySQL8.0
测试数据:
createtablezqs(idint,strvarchar(1000)); insertintozqs(id,str)values(1,'【京东】abc【中国电信】'); insertintozqs(id,str)values(1,'【京东】abc【中国电信】def'); insertintozqs(id,str)values(1,'****【京东】abc【中国电信】def'); insertintozqs(id,str)values(1,'****【京东】abc'); insertintozqs(id,str)values(1,'【京东】abc【中国电信】【中国联通】');
一.需求
经常遇到短信类似的需求,需要提取短信的标记信息,但是可能会存在多个短信标记
此例假设最多有3个标签,需要输出如下:
mysql>select*fromzqs; ±-----±----------------------------------------------------+ |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函数配合
selectsubstr(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 fromzqs;
测试记录:
mysql>selectsubstr(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 ->fromzqs; +--------------+--------------------+--------------------+ |first_val|first_va2|first_va3| +--------------+--------------------+--------------------+ |【京东】|【中国电信】|| |【京东】|【中国电信】|| |【京东】|【中国电信】|| |【京东】||| |【京东】|【中国电信】|【中国联通】| +--------------+--------------------+--------------------+ 5rowsinset(0.00sec)
总结
到此这篇关于MySQL如何从不固定位置提取字符串元素的文章就介绍到这了,更多相关MySQL提取字符串元素内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。