Sie können COLLATE NOCASE
in Ihrer SELECT
Abfrage Folgendes verwenden:
SELECT * FROM ... WHERE name = 'someone' COLLATE NOCASE
Außerdem können Sie in SQLite angeben, dass bei einer Spalte beim Erstellen der Tabelle die Groß- und Kleinschreibung nicht berücksichtigt werden soll, indem Sie in der Spaltendefinition angeben collate nocase
(die anderen Optionen sind binary
(Standard) und rtrim
; siehe hier ). Sie können auch angeben, collate nocase
wann Sie einen Index erstellen. Zum Beispiel:
Tabelle erstellen Test
(
Text_Value Text sortiert Nocase
);
in Testwerte einfügen ('A');
in Testwerte einfügen ('b');
in Testwerte einfügen ('C');
Erstellen Sie den Index Test_Text_Value_Index
on Test (Text_Value collate nocase);
Ausdrücke, bei denen es Test.Text_Value
sich um Ausdrücke handelt, sollten jetzt nicht mehr zwischen Groß- und Kleinschreibung unterscheiden. Zum Beispiel:
sqlite> wähle Text_Value aus Test, wobei Text_Value = 'B';
Text_Value
----------------
b
sqlite> Wählen Sie Text_Value aus der Testreihenfolge von Text_Value aus.
Text_Value
----------------
EIN
b
C.
sqlite> wählen Sie Text_Value aus der Testreihenfolge von Text_Value desc;
Text_Value
----------------
C.
b
EIN
Der Optimierer kann den Index möglicherweise auch für die Suche und den Abgleich in der Spalte verwenden, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird. Sie können dies mit dem explain
SQL-Befehl überprüfen , z.
sqlite> EXPLAIN Wählen Sie Text_Value aus Test aus, wobei Text_Value = 'b';
Adr-Opcode p1 p2 p3
---------------- -------------- ---------- ---------- ---------------------------------
0 Gehe zu 0 16
1 Ganzzahl 0 0
2 OpenRead 1 3 keyinfo (1, NOCASE)
3 SetNumColumns 1 2
4 String8 0 0 b
5 IsNull -1 14
6 MakeRecord 1 0 a
7 MemStore 0 0
8 MoveGe 1 14
9 MemLoad 0 0
10 IdxGE 1 14 +
11 Spalte 1 0
12 Rückruf 1 0
13 Weiter 1 9
14 Schließen 1 0
15 Halt 0 0
16 Transaktion 0 0
17 VerifyCookie 0 4
18 Gehe zu 0 1
19 Noop 0 0
COLLATE NOCASE
zum Index nicht erforderlich, wenn für das Feld selbst bereits diese Sortierung definiert ist: " Die Standard-Sortierfolge ist die für diese Spalte in der Anweisung CREATE TABLE definierte Sortierfolge. "COLLATE NOCASE
funktioniert nur mit ASCII-Text. Sobald Sie "FIANCÉ" oder "voilà" in Ihren Spaltenwerten haben, wird es nicht mehr mit "fiancé" oder "VOILA" übereinstimmen. Nach dem Aktivieren der ICU-ErweiterungLIKE
wird die Groß- und Kleinschreibung nicht berücksichtigt . Dies'FIANCÉ' LIKE 'fiancé'
ist wahr, aber'VOILA' LIKE 'voilà'
immer noch falsch. Und ICU + LIKE hat den Nachteil, dass der Index nicht verwendet wird, sodass er bei großen Tischen langsam sein kann.select * from tbl where firstname='john' and lastname='doe' COLLATE NOCASE
wird bei Groß- und Kleinschreibung nicht berücksichtigtlastname
. Um die Groß- und Kleinschreibung nicht zu berücksichtigenfirstname
, schreiben Sie Folgendes :select * from tbl where firstname='john' COLLATE NOCASE and lastname='doe'
. Es ist spezifisch für diese eine Spalte, nicht für die gesamtewhere
Klausel.quelle
Sie können es so machen:
(Es ist nicht die Lösung, aber in einigen Fällen sehr praktisch)
quelle
Dies ist nicht spezifisch für SQLite, aber Sie können es einfach tun
quelle
Eine andere Möglichkeit besteht darin, eine eigene benutzerdefinierte Sortierung zu erstellen. Sie können diese Sortierung dann in der Spalte festlegen oder zu Ihren Auswahlklauseln hinzufügen. Es wird für Bestellungen und Vergleiche verwendet.
Dies kann verwendet werden, um 'VOILA' LIKE 'voilà' zu machen.
http://www.sqlite.org/capi3ref.html#sqlite3_create_collation
quelle
Eine andere Option, die in Ihrem Fall möglicherweise sinnvoll ist oder nicht, besteht darin, eine separate Spalte mit vorab unterstrichenen Werten Ihrer vorhandenen Spalte zu haben. Dies kann mit der SQLite-Funktion ausgefüllt werden
LOWER()
, und Sie können stattdessen einen Abgleich für diese Spalte durchführen.Natürlich erhöht dies die Redundanz und das Potenzial für Inkonsistenzen. Wenn Ihre Daten jedoch statisch sind, ist dies möglicherweise eine geeignete Option.
quelle
Sie können COLLATE NOCASE einfach in Ihrer SELECT-Abfrage verwenden:
quelle
Wenn die Spalte vom Typ
char
ist, müssen Sie den Wert, den Sie abfragen, an Leerzeichen anhängen. Weitere Informationen finden Sie hier . Dies zusätzlich zur VerwendungCOLLATE NOCASE
oder einer der anderen Lösungen (Upper () usw.).quelle
Mit der Abfrage like können Sie die jeweilige Zeichenfolge mit Tabellenwerten vergleichen.
Wählen Sie den Spaltennamen aus dem Tabellennamen aus, wobei der Spaltenname wie 'jeweiliger Vergleichswert' lautet.
quelle
Es funktioniert perfekt für mich.
SELECT NAME FROM TABLE_NAME WHERE NAME = 'test Name' COLLATE NOCASE
quelle