MySQL - RLIKE演算子
こんにちは、データベース愛好家の皆さん!今日は、MySQLのRLIKE演算子の世界に興味深く飛び込んでみましょう。あなたの近所の親切なコンピュータサイエンスの先生として、私は多くの例と説明を交えてこのトピックを案内します。那么、虚拟のメモ帳を準備して、一緒に潜りましょう!
MySQL RLIKE演算子
RLIKEとは?
RLIKEは、正規表現を使用してパターンマッチを行う強力な演算子です。今、あなたが考えていることを知っています - 「正規表現?それって恐ろしい!」でも、心配しないでください。ステップバイステップで解説します。
RLIKEを超智能な検索ツールとして考えてください。データベースの中にいる複雑なパターンに基づいて情報を見つけることができる探偵のような存在です。すごい吧?
基本構文
RLIKE演算子の基本構文は以下の通りです:
expr RLIKE pattern
ここで、expr
は検索したいexpression(通常はカラム名)で、pattern
はマッチングしたい正規表現です。
簡単な例から始めましょう:
SELECT * FROM customers WHERE last_name RLIKE 'son$';
このクエリは、姓が「son」で終わるすべての顧客を見つけます。パターンの中の$
記号は「文字列の終わり」を意味します。したがって、Johnson、Wilson、またはAndersonなどの名前が一致します。
RLIKEで使用されるパターン
さあ、RLIKEで使用できる一般的なパターンを見てみましょう。これらは、私たちのデータベース探偵が謎を解決するための秘密のコードだと思ってください!
パターン | 説明 | 例 |
---|---|---|
^ | 文字列の始めに一致 | '^A'は'Apple'に一致しますが、'Banana'には一致しません |
$ | 文字列の終わりに一致 | 'e$'は'Apple'に一致しますが、'Banana'には一致しません |
. | 任意の一文字に一致 | 'b.t'は'bat'、'bit'、'but'などに一致します |
* | 前の文字の0回以上の発生に一致 | 'go*gle'は'ggle'、'google'、'gooogle'などに一致します |
+ | 前の文字の1回以上の発生に一致 | 'go+gle'は'google'、'gooogle'に一致しますが、'ggle'には一致しません |
[] | かかり括弧内の任意の一文字に一致 | '[aeiou]'は任意の母音に一致します |
[^] | かかり括弧内にない任意の一文字に一致 | '[^0-9]'は任意の数字以外に一致します |
これらを実際に使ってみましょう!
SELECT * FROM products WHERE name RLIKE '^A.*e$';
このクエリは、名前が'A'で始まり、'e'で終わるすべての製品を見つけます。中央の.*
は「0回以上の任意の文字」を意味します。したがって、「Apple」、「Airplane」、または単なる「Ae」などの名前が一致します。
文字列に対するRLIKE
RLIKEはテーブル内の検索に限りません。文字列に対しても直接使用できます!これはパターンをクエリに使用する前にテストするのに非常に便利です。
SELECT 'MySQL' RLIKE 'SQL$';
これは「MySQL」が「SQL」で終わるかどうかを返します。1(真)が返されるため、「MySQL」は確かに「SQL」で終わります。
次は楽しいものです:
SELECT 'Mississippi' RLIKE 's+is+';
これは1を返します。「Mississippi」には1回以上の「s」に続く「i」に続く1回以上の「s」が含まれているため、「ssis」が文字列の中央に一致します。
RLIKE演算子を使用したクライアントプログラム
次に、より複雑なシナリオでRLIKEを使用してみましょう。Imagine we have a table of email addresses, and we want to find all Gmail addresses. Here's how we could do that:
SELECT * FROM users WHERE email RLIKE '^[A-Za-z0-9._%+-]+@gmail\\.com$';
これは複雑に見えます!解説しましょう:
-
^
: 文字列の始め -
[A-Za-z0-9._%+-]+
: Emailアドレスに許可されている1文字以上の文字、数字、または特殊文字 -
@
: @記号 -
gmail\\.com
: 文字通り「gmail.com」(ドットをエスケープするためにバックスラッシュを使用) -
$
: 文字列の終わり
このパターンは標準的なGmailアドレスに一致します。
私の教師経験からの小さな話です:ある生徒がデータベース内のすべてのAOLメールアドレスを見つけるために、手動で各エントリをチェックしていました(数千件ありました)。彼にRLIKEを使う方法を教えたとき、彼は非常に喜んでクラスで跳ねました!
練習時間!
楽しいエクササイズで終わりましょう。以下の形式の電話番号を見つけるためのRLIKEパターンを書けてみてください:(XXX) XXX-XXXX。挑戦してみて、そして以下の答えを確認してください!
SELECT * FROM contacts WHERE phone RLIKE '^\\\([0-9]{3}\\\) [0-9]{3}-[0-9]{4}$';
このパターンは以下に一致します:
-
^\\\(
: 开く括弧で始まる(二重エスケープが必要なため) -
[0-9]{3}
: 正確に3桁の数字 -
\\\)
: 閉じる括弧 - ` ` : 空白
-
[0-9]{3}
: 更に3桁の数字 -
-
: ハイフン -
[0-9]{4}
: 最後の4桁の数字 -
$
: 文字列の終わり
そして、ここまででRLIKEの力を手に入れました!どんなスーパーパワーもように、賢く使ってください。未来のデータベースの魔法使いとして、ハッピークエリを!
Credits: Image by storyset