PostgreSQLで大文字を含む行を返すための4つのオプションを次に示します。
次のデータを含むテーブルがあるとします。
SELECT c1 FROM t1;
結果:
c1 ---------------- CAFÉ Café café 1café eCafé James Bond 007 JB 007 007 null É É 123 é é 123 ø Ø
次のメソッドを使用して、大文字を含む行を返すことができます。
オプション1:POSIX文字クラスと比較
~
を使用できます 正規表現パターンの大文字と小文字を区別する一致を実行する演算子。パターンは、必要に応じて単純または複雑にすることができます。
簡単なオプションは、列を[:upper:]
と比較することです。 POSIX文字クラス:
SELECT c1 FROM t1
WHERE c1 ~ '[[:upper:]]';
結果:
c1 ---------------- CAFÉ Café eCafé James Bond 007 JB 007 É É 123 Ø
オプション2:LOWER()
と比較します 文字列
もう1つのオプションは、LOWER()
を使用することです。 元の値を同等の小文字と比較する関数:
SELECT c1 FROM t1
WHERE LOWER(c1) <> c1;
結果:
c1 ---------------- CAFÉ Café eCafé James Bond 007 JB 007 É É 123 Ø
等しくない(<>
を使用する )演算子(代わりに!=
を使用できます <>
の代わりに 必要に応じて)、同等の小文字とは異なる行のみを返します。これを行う理由は、値が同等の小文字と同じである場合、そもそもすでに小文字であるためです(そして、それを返したくないのです)。
デフォルトでは、PostgreSQLは大文字と小文字を区別して照合を実行するため、必要な結果を得るために大文字と小文字を区別する照合を指定する必要はありません。
オプション3:実際の文字と比較する
もう1つのオプションは、 ~
を使用することです。 照合する各大文字を明示的に含む正規表現パターンを持つ演算子:
SELECT c1 FROM t1
WHERE c1 ~ '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';
結果:
c1 ---------------- CAFÉ Café eCafé James Bond 007 JB 007
この場合、前の例よりも少ない行が返されます。 É
のような文字を指定しなかったためです およびØ
、これらの例で返されました。結果にはÉ
が含まれています ただし、その行が返されたのは、実行する他の大文字も含まれているためです。 一致します。
したがって、このオプションは前のオプションよりも制限されていますが、一致させたい文字をより細かく制御できます。
オプション4:文字の範囲と比較する
または、一致させる文字の範囲を指定することもできます:
SELECT c1 FROM t1
WHERE c1 ~ '[A-Z]';
結果:
c1 ---------------- CAFÉ Café eCafé James Bond 007 JB 007