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のインストールと設定方法のグラフィックチュートリアル(CentOS7)

1. システム環境[root@localhost ホーム]# cat /etc/redhat-re...

vue-nuxt ログイン認証の実装

目次導入リンク始めるコードを読み進めてくださいプロキシ設定傍受を要求する異なるプレフィックスを持つイ...

Docker で Harbor パブリック リポジトリを構築する方法の例

前回のブログ投稿では、レジストリのプライベート ウェアハウスについて説明しました。今日は、Harbo...

基本構造、ドキュメント タイプ、ヘッダー、本文などの一般的な HTML 要素の概要。

1. 基本構造:コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBL...

Vueを使用してタイマー機能を実装する

この記事の例では、タイマー機能を実装するためのVueの具体的なコードを参考までに共有しています。具体...

廃止された Docker は Podman に置き換えられますか?

Kubernetes チームは最近、最新バージョンの Docker でサポートされている機能を廃止...

mysqlは時間を自動的に追加し、時間を自動的に追加および更新する操作を実装します

時間フィールドは、データベースの使用時によく使用されます。よく使われるのは作成時間と更新時間です。し...

CSS レスポンシブ レイアウト システムの例コード

レスポンシブ レイアウト システムは、今日の一般的な CSS フレームワークではすでに非常に一般的で...

MySql 学習ノートにおけるトランザクション分離レベルの詳細な説明

背景トランザクションについて話すとき、誰もがそれに精通している必要があります。MySQL データベー...

フロントエンドが習得すべき、複数列の等高レイアウトを実現するための CSS テクニック

1. はじめにページを作成しているときに、複数列のレイアウトに遭遇することがあります。各列の内容が異...

ホストNginx + Docker WordPress Mysqlを設定するための詳細な手順

環境Linux 3.10.0-693.el7.x86_64 Docker バージョン 18.09.0...

MySQLトリガーの使用と理解

目次1. トリガーとは何ですか? 2. トリガーを作成するトリガーを作成するための構文は次のとおりで...

要素テーブルヘッダー行の高さの問題の解決

目次序文1. 問題の原因2. 解決策VueはelementUIテーブルtr thの高さと背景色を変更...

Nginx での Frp による https への強制リダイレクト設定の詳細な説明

自宅のルーターが300Mの帯域幅を80Mに強制的に減らしたため、3205Uソフトルーターを購入しまし...