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

MariaDBで小文字を含む行を見つける4つの方法

    MariaDBで小文字を含む行を返すための4つのオプションを次に示します。

    サンプルデータ

    次のデータを含むテーブルがあるとします。

    SELECT c1 FROM t1;

    結果:

    +----------------+
    | c1             |
    +----------------+
    | CAFÉ           |
    | Café           |
    | café           |
    | 1café          |
    | eCafé          |
    | James Bond 007 |
    | JB 007         |
    | 007            |
    | NULL           |
    |                |
    | É              |
    | É 123          |
    | é              |
    | é 123          |
    | ø              |
    | Ø              |
    +----------------+

    次のメソッドを使用して、小文字を含む行を返すことができます。

    オプション1:POSIX文字クラスと比較する

    REGEXPを使用できます 正規表現パターンの一致を実行する演算子。

    簡単なオプションは、列を[:lower:]と比較することです。 POSIX文字クラス:

    SELECT c1 FROM t1
    WHERE c1 REGEXP '[[:lower:]]';

    結果:

    +----------------+
    | c1             |
    +----------------+
    | Café           |
    | café           |
    | 1café          |
    | eCafé          |
    | James Bond 007 |
    | é              |
    | é 123          |
    | ø              |
    +----------------+

    RLIKE REGEXPの同義語です 、REGEXPを置き換えることができます RLIKEを使用 同じ結果を得るには:

    SELECT c1 FROM t1
    WHERE c1 RLIKE '[[:lower:]]';

    オプション2:UPPER()と比較する 文字列

    もう1つのオプションは、UPPER()を使用することです。 元の値を同等の大文字と比較する関数:

    SELECT c1 FROM t1
    WHERE BINARY UPPER(c1) <> BINARY c1;

    結果:

    +----------------+
    | c1             |
    +----------------+
    | Café           |
    | café           |
    | 1café          |
    | eCafé          |
    | James Bond 007 |
    | é              |
    | é 123          |
    | ø              |
    +----------------+

    等しくない(<>を使用する )演算子(代わりに!=を使用できます <>の代わりに 必要に応じて)、大文字とは異なる行のみを返します。これを行う理由は、値が同等の大文字と同じである場合、そもそもすでに大文字であるためです(そして、それを返したくないのです)。

    デフォルトでは、MariaDBは大文字と小文字を区別しない検索を実行するため、BINARYを使用します 大文字と小文字を区別して検索する演算子。

    これは次のように行うこともできます:

    SELECT c1 FROM t1
    WHERE BINARY(UPPER(c1)) <> BINARY(c1);

    オプション3:実際のキャラクターと比較する

    もう1つのオプションは、REGEXPを使用することです。 照合する各小文字を明示的に含む正規表現パターンを持つ演算子:

    SELECT c1 FROM t1
    WHERE BINARY c1 REGEXP BINARY '[abcdefghijklmnopqrstuvwxyz]';

    結果:

    +----------------+
    | c1             |
    +----------------+
    | Café           |
    | café           |
    | 1café          |
    | eCafé          |
    | James Bond 007 |
    +----------------+

    今回は、前の例よりも少ない行が返されます。 éのような文字を指定しなかったためです およびø 、これらの例で返されました。結果にはéが含まれています ただし、その行が返されたのは、する他の小文字も含まれているためです。 一致します。

    したがって、このオプションを使用する場合は、すべての有効な文字がカバーされていることを確認する必要があります。

    オプション4:文字の範囲と比較する

    もう1つの方法は、一致させる文字の範囲を指定することです。

    SELECT c1 FROM t1
    WHERE BINARY c1 REGEXP BINARY '[a-z]';

    結果:

    +----------------+
    | c1             |
    +----------------+
    | Café           |
    | café           |
    | 1café          |
    | eCafé          |
    | James Bond 007 |
    +----------------+

    1. CTEから挿入

    2. ストアドプロシージャの結果セットから列を選択します

    3. SQLクエリの実行順序

    4. NoSQLにおけるDBAの役割