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

推薦する

Win10にMySQL8圧縮パッケージ版をインストールするチュートリアル

1 公式サイトからMySQL8をダウンロードしてインストールするMySQL8 ダウンロードアドレスこ...

docker の run/cmd/entrypoint の違いの詳細な説明

Dockerfile では、run、cmd、entrypoint はすべてコマンドを実行するために使...

リソースアップロード機能を実現するための SpringBoot+nginx の詳細な例

最近、画像、ビデオ、CSS/JS などの静的リソースを配置するために nginx を使用する方法を学...

linxu での Svn ワンクリック インストール シェル スクリプトの詳細な説明

#!/bin/bash #SVNをダウンロード yum -y サブバージョンをインストールします ...

メタタグにおける http-equiv 属性の使用の概要

metaはhtml言語のhead領域にある補助タグです。おそらく、これらのコードは不要だと思うかもし...

Dockerの一般的なコマンドとヒントのまとめ

インストールスクリプトUbuntu / CentOS Debian のインストールに問題があるようで...

Linuxホスト名変更コマンドの詳しい説明

Linux ホスト名変更コマンド1. ホスト名を一時的に変更するだけの場合は、hostname コマ...

Vue ルーター vue-router 詳細説明ガイド

中国語ドキュメント: https://router.vuejs.org/zh/ Vue Router...

仮想マシンでXshell5をLinuxに接続する方法と障害の解決方法

かなり前に仮想マシンをインストールしましたが、ようやく Linux をインストールしました。マシンの...

Hbase 入門

1. HBaseの概要1.1 HBaseとはHBase は、高い信頼性、高いパフォーマンス、列ストレ...

純粋な CSS で実装された 3 つの通知バーのスクロール効果

序文通知バー コンポーネントは、比較的一般的なコンポーネントです。基本的に、すべてのサイトにこのよう...

MySQL アーキテクチャのナレッジポイントの概要

1. データベースとデータベースインスタンスMySQL の研究では、データベースとデータベース イン...

MySQLのロック機構の詳細な説明

序文データの一貫性と整合性を確保するために、あらゆるデータベースにはロック メカニズムが備わっていま...

nginx がドメイン名アクセス用に設定されている場合にドメイン名の後に 2 つのスラッシュ // が表示される問題の解決方法

最近、個人のウェブサイトを書き直しました。Alibaba Cloudで新しいサーバーを購入しました。...

位置固定オフセット問題を解決する方法の詳細な説明

質問CSS 固定配置の position:fixed は非常に使いやすいです。ブラウザのビューポート...