[MySQLは知っておく必要があります(6)] [正規表現による検索]

Previous:[MySQLは知っておくべき(5)] [ワイルドカードを使用してフィルタリングする]

+++++++++++++ Start line ++++++++++++++++

1.正規表現の概要

あらゆる種類のプログラミング言語、テキストエディタ、およびオペレーティングシステムが正規表現をサポートしています。

次に、MySQL正規表現を使用します

MySQLは、WHERE句を使用した正規表現の予備サポートを提供します。これにより、正規表現を指定し、SELECTで取得したデータをフィルタリングできます。

正規表現言語の
サブセットのみMySQLは、ほとんどの正規表現実装の小さなサブセットのみをサポートします

2.1基本的な文字マッチング

mysql> SELECT prod_name
    -> FROM products
    -> WHERE prod_name REGEXP '1000'
    -> ORDER BY prod_name;

ここに画像の説明を挿入

分析

このステートメントは、LIKEを使用したステートメントと非常によく似ています。REGEXPに続くものは正規表現として扱われます

mysql> SELECT prod_name
    -> FROM products
    -> WHERE prod_name REGEXP '.000'
    -> ORDER BY prod_name;

ここに画像の説明を挿入

分析

。正規表現言語の特殊文字です。任意の文字に一致することを意味するため、1000と2000が一致して返されます

LIKEとREGEXP

LIKEは列全体と一致します。一致したテキストが列の値にある場合、LIKEは見つからず、対応する行は返されません。REGEXPは列値内で一致しますが、一致したテキストが列値にある場合、REGEXPはそれを見つけ、対応する行が返されます。

2.2 ORマッチングを実行する

2つの文字列のいずれかを検索するには、|を使用します。

mysql> SELECT prod_name
    -> FROM products
    -> WHERE prod_name REGEXP '1000|2000'
    -> ORDER BY prod_name;

ここに画像の説明を挿入

2.3複数の文字のいずれかに一致

[and]で囲まれた文字のセットを指定する

mysql> SELECT prod_name
    -> FROM products
    -> WHERE prod_name REGEXP '[123] Ton'
    -> ORDER BY prod_name;

ここに画像の説明を挿入

分析

[123] Tonは[1 | 2 | 3] Tonの略です

mysql> SELECT prod_name
    -> FROM products
    -> WHERE prod_name REGEXP '1|2|3 Ton'
    -> ORDER BY prod_name;

ここに画像の説明を挿入

分析

[^ 123]これらの文字以外のすべてに一致します

2.4マッチング範囲

セットを使用して、一致する1つ以上の文字を定義できます

範囲は完全なセットに限定されません。範囲は必ずしも数値ではありません。[az]は任意の文字に一致します

mysql> SELECT prod_name
    -> FROM products
    -> WHERE prod_name REGEXP '[1-5] Ton'
    -> ORDER BY prod_name;

ここに画像の説明を挿入

2.5特殊文字に一致

mysql> SELECT vend_name
    -> FROM vendors
    -> WHERE vend_name REGEXP '.'
    -> ORDER BY vend_name;

ここに画像の説明を挿入

分析

。任意の文字に一致するため、すべての行が取得されます

mysql> SELECT vend_name
    -> FROM vendors
    -> WHERE vend_name REGEXP '\\.'
    -> ORDER BY vend_name;

ここに画像の説明を挿入

一致\

バックスラッシュ文字自体に一致させるには、\\を使用する必要があります

2.6複数のインスタンスのマッチング

mysql> SELECT prod_name
    -> FROM products
    -> WHERE prod_name REGEXP '\\([0-9] sticks?\\)'
    -> ORDER BY prod_name;

ここに画像の説明を挿入

分析

[0-9]任意の数字の
棒と一致しますか?棒と棒を一致させます

mysql> SELECT prod_name
    -> FROM products
    -> WHERE prod_name REGEXP '[[:digit:]]{4}'
    -> ORDER BY prod_name;

ここに画像の説明を挿入

分析

[:digit:]は任意の数字に一致します
{4}は4回出現する前に文字が必要です

mysql> SELECT prod_name
    -> FROM products
    -> WHERE prod_name REGEXP '[0-9][0-9][0-9][0-9]'
    -> ORDER BY prod_name;

ここに画像の説明を挿入

2.8ロケーター

mysql> SELECT prod_name
    -> FROM products
    -> WHERE prod_name REGEXP '^[0-9\\.]'
    -> ORDER BY prod_name;

ここに画像の説明を挿入

分析

^一致文字列の始まり

REGXPをLIKEのように動作させる

LIKEとREGEXPの違いは、LIKEが文字列全体と一致し、REGEXPが文字列と一致することです。ロケーターを使用して、各式を^で開始し、各式を$で終了することにより、REGEXPをLIKEと同じにすることができます。

+++++++++++++ End line ++++++++++++++++

次:[MySQLは知っておくべき(7)] [計算フィールドの作成]

おすすめ

転載: blog.csdn.net/qq_42893334/article/details/108728802