婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MySQL如何從不固定位置提取字符串元素詳解

MySQL如何從不固定位置提取字符串元素詳解

熱門標簽:百應電話機器人優勢 外呼系統打電話上限是多少 曲靖移動外呼系統公司 地圖標注費用是多少 武漢網絡外呼系統服務商 怎樣在地圖標注銷售區域 南昌三維地圖標注 電話外呼系統改號 啥是企業400電話辦理

前言

備注:測試數據庫版本為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提取字符串元素內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

標簽:吉林 黑河 錦州 滄州 甘南 隨州 資陽 荊州

巨人網絡通訊聲明:本文標題《MySQL如何從不固定位置提取字符串元素詳解》,本文關鍵詞  MySQL,如何,從不,固定,位置,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL如何從不固定位置提取字符串元素詳解》相關的同類信息!
  • 本頁收集關于MySQL如何從不固定位置提取字符串元素詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 宜阳县| 鹤山市| 定西市| 黄大仙区| 峨眉山市| 万年县| 宝清县| 来宾市| 赫章县| 姜堰市| 太湖县| 桐柏县| 诸暨市| 威宁| 嵩明县| 环江| 贡嘎县| 河北省| 沛县| 怀来县| 象州县| 栾川县| 方正县| 北海市| 三都| 祥云县| 兴仁县| 绿春县| 漯河市| 胶南市| 新和县| 大名县| 监利县| 河池市| 莱芜市| 大名县| 抚顺县| 鹤岗市| 安陆市| 丘北县| 万源市|