OracleDatabaseで大文字を含む行を返すための4つのオプションを次に示します。
次のデータを含むテーブルがあるとします。
SELECT c1 FROM t1;
結果:
CAFÉ Café café 1café eCafé James Bond 007 JB 007 007 É É 123 é é 123 ø Ø
次のメソッドを使用して、大文字を含む行を返すことができます。
オプション1:POSIX文字クラスと比較
OracleのREGEXP_LIKE
条件は、POSIX正規表現標準およびUnicode正規表現ガイドラインに準拠しています。したがって、[:upper:]
を使用できます 大文字をチェックするPOSIX文字クラス:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[[:upper:]]');
結果:
CAFÉ Café eCafé James Bond 007 JB 007 É É 123 Ø
オプション2:LOWER()
と比較します 文字列
LOWER()
を使用できます 元の値を同等の小文字と比較する関数:
SELECT c1 FROM t1
WHERE LOWER(c1) <> c1;
結果:
CAFÉ Café eCafé James Bond 007 JB 007 É É 123 Ø
等しくない(<>
を使用する )演算子(代わりに!=
を使用できます <>
の代わりに 必要に応じて)、同等の小文字とは異なる行のみを返します。これを行う理由は、値が同等の小文字と同じである場合、そもそもすでに小文字であるためです(そして、それを返したくないのです)。
デフォルトでは、Oracleは大文字と小文字を区別する検索を実行するため、大文字と小文字を区別するためにクエリに対して他に何もする必要はありません。
オプション3:実際の文字と比較する
もう1つのオプションは、 REGEXP_LIKE
を使用することです。 照合する各大文字を明示的に含む正規表現パターンの条件:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]', 'c');
結果:
CAFÉ Café eCafé James Bond 007 JB 007
'c'
決定された条件の照合で大文字と小文字が区別されない、またはアクセントが区別されない場合でも、大文字と小文字を区別し、アクセントを区別するマッチングを指定します。
今回は、前の例よりも少ない行が返されます。 É
のような文字を指定しなかったためです およびØ
、これらの例で返されました。結果にはÉ
が含まれています ただし、その行が返されたのは、実行する他の大文字も含まれているためです。 一致します。
したがって、このオプションを使用する場合は、すべての有効な文字がカバーされていることを確認する必要があります。
ここでも、これら2つの文字が含まれています:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[ÉØABCDEFGHIJKLMNOPQRSTUVWXYZ]', 'c');
結果:
CAFÉ Café eCafé James Bond 007 JB 007 É É 123 Ø
オプション4:文字の範囲と比較する
もう1つの方法は、一致させる大文字の範囲を指定することです。
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[A-Z]', 'c');
結果:
CAFÉ Café eCafé James Bond 007 JB 007