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 | +----------------+