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

MySQLでのREGEXP_SUBSTR()関数のしくみ

    MySQLでは、 REGEXP_SUBSTR() 関数は、指定された正規表現パターンに一致する部分文字列を返します。

    一致するものがない場合(つまり、入力文字列に部分文字列が含まれていない場合)、結果は NULLになります。 。

    構文

    構文は次のようになります:

    REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]])

    expr 入力文字列であり、 pat 部分文字列の正規表現パターンです。

    オプションのpos 引数を使用すると、文字列内の位置を指定して検索を開始できます。省略した場合、位置1から始まります。

    オプションのoccurrence 引数を使用すると、検索する一致のオカレンスを指定できます。省略した場合、最初のオカレンスが使用されます(オカレンス1)。

    オプションのmatch_type 引数を使用すると、正規表現を改良できます。たとえば、この引数を使用して、大文字と小文字を区別する一致を指定するかどうかを指定できます。

    例1-基本的な使用法

    基本的な例は次のとおりです。

    SELECT REGEXP_SUBSTR('Thailand or Cambodia', 'l.nd') Result;

    結果:

    +--------+
    | Result |
    +--------+
    | land   |
    +--------+
    

    この場合、一致があり、部分文字列が返されます。

    例2–複数の一致

    デフォルトでは、文字列内に複数の一致がある場合、最初の一致が返されます(ただし、必要に応じて別の出現を指定できます。すぐにわかります):

    SELECT REGEXP_SUBSTR('Lend for land', 'l.nd') Result;

    結果:

    +--------+
    | Result |
    +--------+
    | Lend   |
    +--------+
    

    例3–一致なし

    一致するものがない例を次に示します。

    SELECT REGEXP_SUBSTR('Lend for land', '^C') Result;

    結果:

    +--------+
    | Result |
    +--------+
    | NULL   |
    +--------+
    

    一致するものがないため、結果は NULLになります 。

    例4– pos 引数

    開始位置を指定する例を次に示します。

    SELECT REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2) Result;

    結果:

    +--------+
    | Result |
    +--------+
    | Cut    |
    +--------+
    

    最初のオカレンスの開始後の位置2から開始したため、代わりに次のオカレンスが返されます。

    別の例を次に示します。

    SELECT 
      REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 1) 'Pos 1',
      REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2) 'Pos 2',
      REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 6) 'Pos 6';

    結果:

    +-------+-------+-------+
    | Pos 1 | Pos 2 | Pos 6 |
    +-------+-------+-------+
    | Cat   | Cut   | Cot   |
    +-------+-------+-------+
    

    例5–発生 引数

    occurrenceの使用例を次に示します。 口論。いずれの場合も、位置1から開始します。

    SELECT 
      REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 1, 1) 'Occurrence 1',
      REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 1, 2) 'Occurrence 2',
      REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 1, 3) 'Occurrence 3';

    結果:

    +--------------+--------------+--------------+
    | Occurrence 1 | Occurrence 2 | Occurrence 3 |
    +--------------+--------------+--------------+
    | Cat          | Cut          | Cot          |
    +--------------+--------------+--------------+
    

    ただし、別の位置から開始すると、結果は異なります。

    SELECT 
      REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2, 1) 'Occurrence 1',
      REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2, 2) 'Occurrence 2',
      REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2, 3) 'Occurrence 3';

    結果:

    +--------------+--------------+--------------+
    | Occurrence 1 | Occurrence 2 | Occurrence 3 |
    +--------------+--------------+--------------+
    | Cut          | Cot          | NULL         |
    +--------------+--------------+--------------+
    

    これは、最初の発生が開始された後に開始位置が来たために発生しました。したがって、オカレンス2がオカレンス1になり、オカレンス3がオカレンス2になります。また、オカレンスがなくなったため、オカレンス3の結果はNULLになりました(つまり、オカレンス3はありませんでした)。

    例6– match_type 引数

    一致タイプを決定するための追加の引数を指定できます。これにより、一致で大文字と小文字が区別されるかどうか、行末記号を含めるかどうかなどを指定できます。

    大文字と小文字を区別する一致と大文字と小文字を区別しない一致を指定する例を次に示します。

    SELECT 
      REGEXP_SUBSTR('Cat Cut Cot', 'c.t', 1, 1, 'c') 'Case-Sensitive',
      REGEXP_SUBSTR('Cat Cut Cot', 'c.t', 1, 1, 'i') 'Case-Insensitive';

    結果:

    +----------------+------------------+
    | Case-Sensitive | Case-Insensitive |
    +----------------+------------------+
    | NULL           | Cat              |
    +----------------+------------------+
    

    match_type 引数には次の文字を含めることができます:

    c
    大文字と小文字を区別するマッチング。
    i
    大文字と小文字を区別しないマッチング。
    m
    複数行モード。文字列内の行末記号を認識します。デフォルトの動作では、文字列式の最初と最後でのみ行末記号が一致します。
    n
    文字はラインターミネータと一致します。デフォルトはです。 行の終わりで停止するためのマッチング。
    u
    Unixのみの行末。 で終わる行として認識されるのは、改行文字のみです。 、 ^ 、および $ 一致演算子。

    1. スタンドアロンMoodleをクラスター化されたデータベースのスケーラブルなセットアップに移行する方法

    2. 大きなSQLスクリプトを実行する(GOコマンドを使用)

    3. MySQL Errno 150

    4. Soundex、Jaro Winkler、およびEdit Distance(UTL_MATCH)を使用したOracleの重複列値の照合