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はシンプルなマーキー効果を実装します

推薦する

Dockerイメージサイズを最適化する一般的な方法

通常、私たちが構築する Docker イメージはサイズが大きく、多くのディスク領域を占有します。コン...

Ubuntu 20.04でAliソースを変更する方法

なお、この記事では、単に 20.04 ソースに変更する方法を説明するのではなく、20.04 に基づい...

Centos8でdockerがインストールできない問題の解決方法

問題 [root@zh ~]# [root@zh ~]# [root@zh ~]# yum -y d...

Dockerコンテナの操作手順の概要と詳細説明

1. コンテナを作成して実行するdocker run -it --rm centos:latest ...

CSS スタイルの優先順位はどれくらい複雑ですか?

昨晩、面接の質問を見ていたら、CSS スタイルの優先順位について特に明確に説明していない人が何人かい...

MySQLに必要な共通知識のまとめ

目次主キー制約一意の主キー非 Null 制約デフォルトの制約外部キー制約1NF 2NF 3NFデータ...

Zabbix カスタム監視 nginx ステータス実装プロセス

目次Zabbix カスタム監視 nginx ステータス1. ステータスインターフェースを開く2. 監...

CSS の div の下の同じ行にある複数の要素を右揃えにする

方法1:フロート:右さらに、フローティングにするとレイアウトがよりコンパクトになります(隙間がなくな...

要素シャトルフレームのパフォーマンス最適化の実装

目次背景解決新しい質問高度な背景シャトル ボックスが大量のデータを処理すると、レンダリングされる D...

Web面接におけるJS事前解析と変数プロモーションの違い

目次事前分析とは何ですか?変数と関数の準備の違いvar 変数の繰り返し宣言変数と関数の昇格の優先順位...

Linuxでmore、less、catコマンドを使用してファイルの内容を表示します

Linux では、cat、more、less の各コマンドを使用してファイルの内容を表示できます。c...

MySQLの高性能最適化スキルの概要

データベースコマンド仕様すべてのデータベース オブジェクト名には小文字を使用し、アンダースコアで区切...

docker version es、milvus、minio 起動コマンドの詳細な説明

1. es起動コマンド: docker run -itd -e TAKE_FILE_OWNERSHI...

VueにExcelテーブルプラグインを導入する方法

この記事では、Excelテーブルプラグインを導入するVueの具体的なコードを参考までに共有します。具...

Vue 関数のアンチシェイクとスロットリングの正しい使用方法

序文1. デバウンス: 高頻度イベントがトリガーされた後、関数は n 秒以内に 1 回だけ実行されま...