SQLiteで大文字を含む行を返すための3つのオプションは次のとおりです。
サンプルデータ
次のデータを含むテーブルがあるとします。
.nullvalue null
SELECT c1 FROM t1;
結果:
c1 -------------- CAFÉ Café café 1café eCafé James Bond 007 JB 007 007 null É É 123 é é 123 ø Ø
次のメソッドを使用して、大文字を含む行を返すことができます。
オプション1:LOWER()
と比較する 文字列
LOWER()
を使用できます 元の値を同等の小文字と比較する関数:
SELECT c1 FROM t1
WHERE LOWER(c1) <> c1;
結果:
c1 -------------- CAFÉ Café eCafé James Bond 007 JB 007
等しくない(<>
を使用する )演算子(代わりに!=
を使用できます <>
の代わりに 必要に応じて)、同等の小文字とは異なる行のみを返します。これを行う理由は、値が同等の小文字と同じである場合、そもそもすでに小文字であるためです(そして、それを返したくないのです)。
SQLiteは大文字と小文字を区別して検索を実行するため、必要な結果を得るために他に何もする必要はありません。
上記の例では、大文字のUnicode文字É
が返されないことに気付いたかもしれません。 およびØ
値に非Unicodeの大文字も含まれていない限り。 SQLiteはUnicode文字を完全にはサポートしていません。たとえば、LOWER()
およびUPPER()
関数は、英語で使用される26文字の大文字小文字のマッピングのみを提供します。したがって、上記の例では、Unicode文字を同等の小文字に変換しませんでした。
Unicode文字を操作する必要がある場合は、SQLiteICU拡張機能を確認してください。
オプション2:実際のキャラクターと比較する
もう1つのオプションは、REGEXP
を使用することです。 照合する各大文字を明示的に含む正規表現パターンを持つ演算子:
SELECT c1 FROM t1
WHERE c1 REGEXP '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';
結果:
c1 -------------- CAFÉ Café eCafé James Bond 007 JB 007
必要に応じて、リストにUnicode文字を含めることができます:
SELECT c1 FROM t1
WHERE c1 REGEXP '[ÉØABCDEFGHIJKLMNOPQRSTUVWXYZ]';
結果:
c1 -------------- CAFÉ Café eCafé James Bond 007 JB 007 É É 123 Ø
オプション3:文字の範囲と比較する
もう1つの方法は、一致させる大文字の範囲を指定することです。
SELECT c1 FROM t1
WHERE c1 REGEXP '[A-Z]';
結果:
c1 -------------- CAFÉ Café eCafé James Bond 007 JB 007