MySQL で固定されていない位置から文字列要素を抽出する方法

MySQL で固定されていない位置から文字列要素を抽出する方法

序文

注: テストデータベースのバージョンはMySQL 8.0です

テストデータ:

テーブルzqs(id int,str varchar(1000))を作成します。

insert into zqs(id,str) values ​​(1,'【JD.com】abc【China Telecom】');
zqs(id,str) に値 (1,'【JD.com】abc【China Telecom】def') を挿入します。
zqs(id,str) に値 (1,'****【JD.com】abc【China Telecom】def') を挿入します。
zqs(id,str) に値 (1,'****【JD.com】abc') を挿入します。
insert into zqs(id,str) values ​​(1,'【JD.com】abc【China Telecom】【China Unicom】');

1. 需要

SMS と同様の要件に遭遇することが多く、SMS タグ情報を抽出する必要がありますが、SMS タグが複数存在する場合があります。

この例では、タグは最大 3 つあり、次のように出力する必要があることを前提としています。

mysql> zqs から * を選択します。
±-----±----------------------------------------------------+
| id | 文字列 |
±-----±----------------------------------------------------+
| 1 | 【JD.com】abc【中国電信】 |
| 1 | 【JD.com】abc【中国電信】def |
| 1 | ****【JD.com】abc【中国電信】def |
| 1 | ****【JD.com】abc |
| 1 | 【JD.com】abc【中国電信】【中国聯通】 |
±-----±----------------------------------------------------+

必要な出力は次のとおりです。

±-------------±-------------------±-------------------+
| 最初の値 | 最初の va2 | 最初の va3 |
±-------------±-------------------±-------------------+
| 【JD.com】 | 【中国電信】 | |
| 【JD.com】 | 【中国電信】 | |
| 【JD.com】 | 【中国電信】 | |
| 【JD.com】 | | |
| 【JD.com】 | 【中国電信】 | 【中国聯通】 |
±-------------±-------------------±-------------------+

2. 解決策

Oracle の文字列インターセプト関数 substr と instr は一緒に使用できますが、MySQL の instr 関数は Oracle の instr 関数よりも弱いです。

このとき、MySQLの正規表現regexp_instr関数とsubstr関数を使用する必要があります。

substr(str, を選択)
   regexp_instr(str,'【',1,1),
   regexp_instr(str,'】',1,1) - regexp_instr(str,'【',1,1) + 1 ) first_val, 
  サブストラクチャ(str,
   regexp_instr(str,'【',1,2),
   regexp_instr(str,'】',1,2) - regexp_instr(str,'【',1,2) + 1) first_va2, 
  サブストラクチャ(str,
   regexp_instr(str,'【',1,3),
   regexp_instr(str,'】',1,3) - regexp_instr(str,'【',1,3) + 1) first_va3
 zqs から;

テストログ:

mysql> 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
 -> zqs から;
+--------------+--------------------+--------------------+
| 最初の値 | 最初の va2 | 最初の va3 |
+--------------+--------------------+--------------------+
| 【JD.com】 | 【中国電信】 | |
| 【JD.com】 | 【中国電信】 | |
| 【JD.com】 | 【中国電信】 | |
| 【JD.com】 | | |
| 【JD.com】 | 【中国電信】 | 【中国聯通】 |
+--------------+--------------------+--------------------+
セット内の行数は 5 です (0.00 秒)

要約する

これで、MySQL で固定されていない位置から文字列要素を抽出する方法についての記事は終了です。MySQL から文字列要素を抽出する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  よくあるNginxの設定ミスの例

>>:  Vueはシンプルなマーキー効果を実装します

推薦する

MySQLのさまざまなロックの概念的理解

楽観的ロック楽観的ロックは、主にデータ バージョン記録メカニズムに基づいて実装され、通常はデータベー...

Zabbix パスワードをリセットする方法 (ワンステップ)

問題の説明長い間アカウントパスワードを入力して Zabbix にログインしていないため、管理者パスワ...

Vue.js の計算プロパティ、監視プロパティ、ライフサイクルの詳細な説明

目次序文計算されたプロパティ計算プロパティの紹介入門ケース統計価格事例ゲッターメソッドとセッターメソ...

加算、減算、乗算、除算の機能を実現するには、HTML に 2 つの数値を入力します。

1. parseFloat() 関数Web ページ上に簡単な計算機を作成し、テキスト ボックスに ...

MySQLのファジークエリの要約

1. 一般的な使用法: (1)%で使用する% は 1 つ以上の文字のワイルドカードを表します。たとえ...

Linuxファイルシステム操作の実装

この読書ノートでは、主にファイルシステムに関連する操作を記録します。ディスクとディレクトリの容量ディ...

Vueはログインタイプの切り替えを実装します

この記事では、ログインタイプの切り替えを実装するためのVueの具体的なコードを例として紹介します。具...

Web ページは何ピクセルで設計すればよいでしょうか?

多くのウェブデザイナーは、ウェブページのレイアウトを設計する際に、インターフェースウェブページの幅に...

Docker は次の「Linux」になれるか?

Linux オペレーティング システムは過去 20 年間にわたってデータ センターに革命をもたらし...

Reactのref属性を深く理解する方法

目次概要1. Refsオブジェクトの作成1.1 React.createRef() 1.2React...

nginx は画像表示の遅さとダウンロードの不完全さの問題を解決します

前面に書かれた最近、ある読者から、ブラウザからサーバーにアクセスすると、画像の表示が遅く、ブラウザに...

React.FCとReact.Componentの使用に関する簡単な説明

目次1. React.FC<> 2. クラスxxはReact.Componentを拡張し...

Web ページでパラメータ名によって ActiveX コントロールのプロパティに値を割り当てる例

コードをコピーコードは次のとおりです。 <HTML> <ヘッド> <T...

Zabbix はどのようにして ssh 経由でネットワーク デバイス データを監視および取得するのでしょうか?

シナリオシミュレーション:ある会社の運用保守担当者は、以前購入した一連のネットワーク機器の光ポートの...

CentOS に Nginx をインストールする方法

公式ドキュメント: https://nginx.org/en/linux_packages.html...