sql >> データベース >  >> RDS >> Mysql

文字列がMySQLの正規表現と一致するかどうかを検出する3つの方法

    MySQLには、正規表現(regex)を使用して操作を実行できるようにする関数と演算子がいくつかあります。この記事では、文字列が特定のパターンで指定された正規表現と一致するかどうかを確認できる2つの演算子と1つの関数について説明します。

    これらの正規表現関数と演算子は次のとおりです。

    • REGEXP_LIKE()
    • REGEXP
    • RLIKE

    演算子(次の2つ)は両方とも関数(最初の1つ)の同義語であるため、これらはすべて基本的に同等です。いずれにせよ、以下で3つすべての動作の例を見ることができます。

    REGEXP_LIKE() 機能

    まず、関数を見てみましょう。 REGEXP_LIKE()を使用して正規表現検索を実行する例を次に示します。 機能:

    SELECT 
      REGEXP_LIKE('Car', '^C') AS 'Match',
      REGEXP_LIKE('Bar', '^C') AS 'No Match';

    結果:

    +-------+----------+
    | Match | No Match |
    +-------+----------+
    |     1 |        0 |
    +-------+----------+
    

    最初の文字列は一致します( C で始まるため) )したがって、結果は1になります。 。 2番目の文字列が一致しないため、結果は0になります。 。

    ただし、この関数は、単に1を返すよりもはるかに便利です。 または0 。たとえば、WHEREに追加できます データベースを照会するときの句。この場合、パターンに一致する行のリストを取得できます。

    次に例を示します:

    SELECT AlbumId, AlbumName
    FROM Albums
    WHERE REGEXP_LIKE(AlbumName, '^Power');

    結果:

    +---------+------------+
    | AlbumId | AlbumName  |
    +---------+------------+
    |       1 | Powerslave |
    |       2 | Powerage   |
    +---------+------------+
    

    完全な表は次のとおりです:

    SELECT AlbumId, AlbumName
    FROM Albums;

    結果:

    +---------+--------------------------+
    | AlbumId | AlbumName                |
    +---------+--------------------------+
    |       1 | Powerslave               |
    |       2 | Powerage                 |
    |       3 | Singing Down the Lane    |
    |       4 | Ziltoid the Omniscient   |
    |       5 | Casualties of Cool       |
    |       6 | Epicloud                 |
    |       7 | Somewhere in Time        |
    |       8 | Piece of Mind            |
    |       9 | Killers                  |
    |      10 | No Prayer for the Dying  |
    |      11 | No Sound Without Silence |
    |      12 | Big Swing Face           |
    |      13 | Blue Night               |
    |      14 | Eternity                 |
    |      15 | Scandinavia              |
    |      16 | Long Lost Suitcase       |
    |      17 | Praise and Blame         |
    |      18 | Along Came Jones         |
    |      19 | All Night Wrong          |
    |      20 | The Sixteen Men of Tain  |
    +---------+--------------------------+
    

    REGEXP オペレーター

    REGEXPを使用して同じことを行う方法は次のとおりです。 演算子:

    SELECT 
      'Car' REGEXP '^C' AS 'Match',
      'Bar' REGEXP '^C' AS 'No Match';

    結果:

    +-------+----------+
    | Match | No Match |
    +-------+----------+
    |     1 |        0 |
    +-------+----------+
    

    そしてデータベースの例:

    SELECT AlbumId, AlbumName
    FROM Albums
    WHERE AlbumName REGEXP '^Power';
    

    結果:

    +---------+------------+
    | AlbumId | AlbumName  |
    +---------+------------+
    |       1 | Powerslave |
    |       2 | Powerage   |
    +---------+------------+
    

    NOT REGEXPを使用することもできます 反対の結果を返します。

    RLIKE オペレーター

    そしてここではRLIKEを使用しています :

    SELECT 
      'Car' RLIKE '^C' AS 'Match',
      'Bar' RLIKE '^C' AS 'No Match';

    結果:

    +-------+----------+
    | Match | No Match |
    +-------+----------+
    |     1 |        0 |
    +-------+----------+
    

    そしてデータベースの例:

    SELECT AlbumId, AlbumName
    FROM Albums
    WHERE AlbumName RLIKE '^Power';
    

    結果:

    +---------+------------+
    | AlbumId | AlbumName  |
    +---------+------------+
    |       1 | Powerslave |
    |       2 | Powerage   |
    +---------+------------+
    

    この場合、私は単にREGEXPを交換しました RLIKEの場合 残りのコードはそのままにしておきました。

    NOT RLIKEを使用することもできます 反対の結果を返します。

    その他の正規表現機能

    MySQLには、他のいくつかの正規表現関数と演算子も含まれています。これらのうちの3つを以下に示します。技術的には、最初の2つを使用して、文字列が正規表現パターンに一致するかどうかを「検出」することもできます(この場合、この記事のタイトルは、「文字列がMySQLの正規表現に一致するかどうかを検出する5つの方法」ではなく「 3つの方法…」)。

    とにかく、ここにさらに3つの正規表現関数があります:

    • REGEXP_INSTR()を使用できます 正規表現パターンに一致する部分文字列の開始インデックスを返す関数。
    • REGEXP_SUBSTR() 関数は、指定された正規表現パターンに一致する部分文字列を返します。
    • そしてREGEXP_REPLACE() 関数は、指定された正規表現パターンに一致する文字列内の部分文字列の出現を置き換えます。

    1. TIME_FORMAT()の例– MySQL

    2. MySQLユーザーDBにパスワード列がありません-OSXへのMySQLのインストール

    3. MariaDBで日付に日を追加する8つの方法

    4. 複数の子行を1つの行に結合するMYSQL