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

推薦する

Linux システムで時間を取得して使用する方法

Linux システム時間には 2 種類あります。 (1)暦上の時刻。値は、指定された時刻、1970 ...

Vue フロントエンドで PDF を生成してダウンロードする方法

目次1. インストールと導入2. PDFファイルをパッケージ化してエクスポートする方法構成の詳細PD...

エコー後に要素編集フォームel-radioが選択できない問題を解決します

目次序文質問オンラインソリューション序文この記事の内容は私がこの業界に入ったときのメモを元にしている...

Linux での Jenkins の詳細なインストール手順

目次1. JDKをインストールする2. Jenkinsをインストールする3. Jenkinsの設定を...

Web ページのエンコーディングで gbk や gb2312 ではなく utf-8 が使用されるのはなぜですか?

選択肢がある場合は、UTF-8を使用することをお勧めします。実際、Windows システム自体のプロ...

ログインインターセプションを実装するためのVueルーティング

目次1. 概要2. ログインインターセプションを実装するためのルーティングナビゲーションガード1. ...

Linuxブートサービスを起動する2つの方法

目次rc.local メソッドchkconfig メソッドrc.local メソッド1 まず自動的に...

HTML ウェブページの段落レイアウトと改行

Web ページの外観はレイアウトに大きく左右されます。ページ内に長い段落のテキストがある場合、通常は...

IE6では画像要素imgに余分な空白スペースがある

ページの DIV+CSS レイアウトを行う際、IE6 で画像要素 img の下に余分なスペースができ...

Vue の新しい組み込みコンポーネントの使用方法の詳細な説明

目次1. テレポート1.1 テレポートの紹介1.2 テレポートの使用1.3 プレビュー効果2. サス...

WMLとは何ですか?

WML (ワイヤレス マークアップ言語)。これは HTML から派生したマークアップ言語ですが、W...

MySQLでルートユーザーのパスワードを変更する方法

方法1: SET PASSWORDコマンドを使用する mysql> username@loca...

HTML5で見逃せないAPIやヒントのまとめ

これまでのブログ投稿では、HTML 5 ではあまり使われていないが注目すべき API やヒントに焦点...

Linux で FTP イメージ サーバーをインストールして展開する方法

Linux で FTP サーバーを設定するためのチュートリアルを参照してください https://w...

ESXI の仮想マシンにワークステーションをインストールするときに発生するネットワーク障害の解決策

問題の説明ESXI で Windows にワークステーションをインストールした後、内部の仮想マシンは...