校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 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如何從不固定位置提取字符串元素詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 山西省| 瓮安县| 皮山县| 杭锦后旗| 章丘市| 肇州县| 七台河市| 青铜峡市| 会昌县| 阳江市| 杭锦后旗| 綦江县| 泾阳县| 惠东县| 金堂县| 吉木乃县| 馆陶县| 新乡市| 奎屯市| 外汇| 黔江区| 固阳县| 上杭县| 蒲城县| 滨州市| 呼伦贝尔市| 三台县| 永安市| 平潭县| 益阳市| 时尚| 江山市| 江达县| 新龙县| 江川县| 天台县| 都江堰市| 津市市| 南澳县| 桐庐县| 乐安县|