Sqlite3 での大文字と小文字を区別しない文字列比較
- Sqlite3 で大文字と小文字を区別しない文字列比較を実装する
-
Sqlite3 で大文字と小文字を区別しない文字列比較を行うには、
CREATE
クエリでCOLLATE NOCASE
を使用する -
Sqlite3 で大文字と小文字を区別しない文字列比較を行うには、
SELECT
クエリでCOLLATE NOCASE
を使用する -
Sqlite3 での大文字と小文字を区別しない文字列比較のための
LIKE
演算子の使用 -
Sqlite3 で大文字と小文字を区別しない文字列比較に
LOWER()
またはUPPER()
関数を使用する
SQLite データベース エンジンは C 言語で開発されています。 スタンドアロンのアプリケーションではありません。 むしろ、アプリケーション開発者がアプリケーションを実装するために使用できるライブラリです。
MySQL と同様に、SQLite もリレーショナル データベース管理システム (RDBMS) であり、SQL (構造化クエリ言語) に実装されています。 SQLite のバージョン 3 では、データベースは文字列の照合時に大文字と小文字を区別するため、ユーザーが =
(単一の等号) 演算子を where
句で使用してデータベースからレコードを選択すると、SQLite データベースはそれが 大文字と小文字を区別。
Sqlite3 で大文字と小文字を区別しない文字列比較を実装する
このような状況に対処するために、SQLite データベースを操作するさまざまな方法があります。
CREATE
またはSELECT
クエリ ステートメントでcollate nocase
句をよく使用します。- もう 1つのオプションは、
LIKE
演算子を使用することです。これは、文字列オペランドを比較するときに大文字と小文字を区別しません。 - 最後に、
=
演算子で文字列を比較するときに、オペランドの両側でUPPER()
およびLOWER()
関数を使用します。
Sqlite3 で大文字と小文字を区別しない文字列比較を行うには、CREATE
クエリで COLLATE NOCASE
を使用する
データ型としてテキスト (文字列) が追加されたさまざまなレコードを持つデータベースがあるとします。 ここで、=
演算子を使用してテーブルからいくつかのレコードを選択すると、データベースはレコードが大文字と小文字を区別することを示します。
したがって、一般的に、SQLite では、collate nocase
クエリを使用してテーブルを作成するときに、列の大文字と小文字を区別しないようにする必要があります。 テーブル内の ID またはインデックス値で collate nocase
を指定することもできます。
以下の例では、example.New_text
は大文字と小文字を区別しません。
create table example
(
New_text text collate nocase
);
insert into example values ('ABC');
insert into example values ('def');
insert into example values ('GHI');
create index example_New_text_Index
on example (New_text collate nocase);
テーブルexample
にいくつかのレコードを作成して挿入したら、select
クエリでレコードを取得して、大文字と小文字の区別をテストできます。 以下の結果は、where
句で文字列データ型を比較するために大文字と小文字を区別しない必要がある場合は常に、collate nocase
が正常に機能することを示しています。
例 1:
SELECT New_Text FROM example WHERE New_Text = 'DEF';
出力:
def
例 1 では、=
演算子を where
句で使用すると、表内の大文字と小文字を区別する値を考慮せずに def
値が返されます。 その理由は、テーブルの作成時に collate nocase
を使用すると、列 New_text
の値の大文字と小文字が区別されなくなるためです。
例 2:
SELECT New_Text FROM example ORDER BY New_Text;
出力:
ABC
def
GHI
例 3:
SELECT New_Text FROM example ORDER BY New_Text DESC;
出力:
GHI
def
ABC
SQLite データベースで EXPLAIN
コマンドを使用する
列のインデックスを使用して、大文字と小文字を区別する一致と検索を確認することもできます。 この目的のために EXPLAIN
コマンドを使用します。
EXPLAIN SELECT New_Text FROM example WHERE New_Text = 'def';
出力:
addr opcode p1 p2
1 Integer 0 0
2 OpenRead 1 3
3 SetNumColumns 1 2
4 String8 0 0
5 IsNull -1 14
6 MakeRecord 1 0
7 MemStore 0 0
8 MoveGe 1 14
9 MemLoad 0 0
10 IdxGE 1 14
11 Column 1 0
12 Callback 1 0
13 Next 1 9
14 Close 1 0
15 Halt 0 0
16 Transaction 0 0
17 VerifyCookie 0 4
18 Goto 0 1
19 Noop 0 0
Sqlite3 で大文字と小文字を区別しない文字列比較を行うには、SELECT
クエリで COLLATE NOCASE
を使用する
大文字と小文字の区別の問題を考慮せず、collate nocase
句を使用せずにテーブルを作成するとします。 次に、SELECT
クエリでレコードを取得する際に collate nocase
句を引き続き使用できます。
この例では、collate nocase
句を SQLite の SELECT
ステートメントで使用できることがわかります。
SELECT * FROM NameOfTheTable WHERE value = 'MatchingValue' COLLATE NOCASE
Sqlite3 での大文字と小文字を区別しない文字列比較のための LIKE
演算子の使用
collate nocase
句と同様に、LIKE
演算子を使用して、SQLite データベースの文字列型の大文字と小文字を区別しない比較を行うことができます。
LIKE
演算子はパターン マッチング演算子です。 通常の演算子と同様に、比較用に左側と右側のオペランドがあります。
左側のオペランドには一致する文字列が含まれ、右側のオペランドには一致する文字列と一致するパターンが含まれます。 この演算子には、特定の文字の任意の数のシーケンスのパーセント記号 %
も含まれています。
LIKE
演算子も大文字と小文字を区別しないため、照合に大文字または小文字のどちらを使用しても問題ありません。 ASCII コード文字ではなく、Unicode 文字でのみ大文字と小文字が区別されます。
たとえば、LIKE
演算子では、ASCII 文字の A
と a
は同じですが、Unicode 文字の Æ
と æ
は異なります。 LIKE
演算子を使用して、SQLite データベース内の大文字と小文字を区別しないレコードを比較します。
SELECT * FROM NameOFTheTable WHERE Value LIKE 'something'
Sqlite3 で大文字と小文字を区別しない文字列比較に LOWER()
または UPPER()
関数を使用する
特定の列に大文字と小文字の値を持つレコードがあるとします。 ただし、SELECT
ステートメントで =
演算子を使用して値を比較すると、結果で大文字と小文字が区別される問題があります。
この問題に対処するために、SQLite 関数 LOWER()
および UPPER()
を実装できます。ここで、LOWER()
関数はすべての文字に対して小文字であり、UPPER()
関数はすべての文字に対して大文字です。 提供された文字列の。 これらの関数をSELECT
ステートメントで使用して、それらを有効にします。
以下の例は、一致する文字列が最初に LOWER()
関数を使用して小文字に変換され、UPPER()
関数を使用すると大文字に変換されることを示しています。
SQLite で UPPER()
関数を使用する:
SELECT * FROM NameOFTheTable WHERE UPPER(value) = UPPER('something')
SQLite で LOWER()
関数を使用する:
SELECT * FROM NameOFTheTable WHERE LOWER(value) = LOWER('something')
Hi, I'm Junaid. I am a freelance software developer and a content writer. For the last 3 years, I have been working and coding with Python. Additionally, I have a huge interest in developing native and hybrid mobile applications.
LinkedIn