Standardmäßig ist die SQLite LIKE
Operator ist case-insensitive für ASCII-Zeichen. Das bedeutet, dass Groß- und Kleinbuchstaben übereinstimmen, unabhängig davon, welche Schreibweise Sie in Ihrem Muster verwenden.
Es gibt jedoch eine Technik, mit der Sie die Groß- und Kleinschreibung beachten können.
SQLite hat eine PRAGMA-Anweisung namens case_sensitive_like , das speziell dafür entwickelt wurde, das LIKE
zu machen Bei ASCII-Zeichen muss der Operator zwischen Groß- und Kleinschreibung unterscheiden.
Der Grund, warum ich „ASCII-Zeichen“ spezifiziere, ist der LIKE
Bei Unicode-Zeichen, die außerhalb des ASCII-Bereichs liegen, unterscheidet der Operator standardmäßig zwischen Groß- und Kleinschreibung.
Wenn Sie also den LIKE
benötigen Operator, der im ASCII-Bereich zwischen Groß- und Kleinschreibung unterscheidet, dem case_sensitive_like Eine PRAGMA-Erklärung könnte das sein, wonach Sie suchen.
Dies gilt auch für like()
Funktion, die genauso funktioniert wie LIKE
Betreiber.
Groß-/Kleinschreibung aktivieren/deaktivieren
Sie können einen der folgenden booleschen Werte verwenden, um die Berücksichtigung der Groß-/Kleinschreibung zu aktivieren:
1
on
true
yes
Sie können einen der folgenden booleschen Werte verwenden, um die Berücksichtigung der Groß-/Kleinschreibung zu deaktivieren:
0
off
false
no
Das Argument kann entweder in Klammern stehen oder durch ein Gleichheitszeichen vom Pragmanamen getrennt werden.
Schlüsselwortargumente können optional in Anführungszeichen stehen.
Beispiel ohne Berücksichtigung der Groß-/Kleinschreibung
Sehen wir uns zunächst an, was passiert, wenn wir case_sensitive_like nicht verwenden PRAGMA-Erklärung.
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
Ergebnis:
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 1 0
In diesem Fall wird in der ersten Spalte zwischen Groß- und Kleinschreibung unterschieden – der Großbuchstabe A entspricht dem Kleinbuchstaben a .
Und hier ist eine Abfrage für eine Datenbanktabelle.
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Ergebnis:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
In diesem Fall erhalten wir eine Übereinstimmung mit allen Katzen, deren Namen mit Br beginnen , obwohl unsere Kriterien ein kleines b verwendet haben .
Beispiel mit Berücksichtigung der Groß- und Kleinschreibung
Sehen wir uns nun an, was passiert, wenn wir case_sensitive_like verwenden PRAGMA-Anweisung zum Aktivieren der Groß-/Kleinschreibung im ASCII-Bereich.
PRAGMA case_sensitive_like = 1;
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
Ergebnis:
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 0 0
Diesmal also das große A tut nicht dem Kleinbuchstaben a entsprechen .
Und hier ist das Datenbankbeispiel nach Aktivierung der Groß-/Kleinschreibung.
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Ergebnis:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 0 Brash 0 Broosh 0 100%Fluff 0 100$Fluff 0
Beachten Sie, dass ich die PRAGMA-Anweisung nicht erneut ausführen musste. Die Einstellung bleibt für meine Verbindung bestehen, bis ich sie ändere.
Groß-/Kleinschreibung deaktivieren
Hier ist ein Beispiel für das Deaktivieren der Groß-/Kleinschreibung und das erneute Ausführen der Abfrage.
PRAGMA case_sensitive_like = 0;
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Ergebnis:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
Die Like()-Funktion
Wie bereits erwähnt, die case_sensitive_like Die PRAGMA-Anweisung wirkt sich auch auf like()
aus Funktion.
PRAGMA case_sensitive_like = 1;
SELECT
CatName,
like('Br%', CatName),
like('br%', CatName)
FROM Cats;
Ergebnis:
CatName like('Br%', CatName) like('br%', CatName) ---------- -------------------- -------------------- Brush 1 0 Brash 1 0 Broosh 1 0 100%Fluff 0 0 100$Fluff 0 0
Unicode-fähiger LIKE-Operator
Sie können auch die SQLite-ICU-Erweiterung verwenden, wenn Sie ein Unicode-fähiges LIKE
benötigen Operator.
Die Implementierung von LIKE
in dieser Erweiterung enthalten ist, verwendet die ICU-Funktion u_foldCase()
Groß-/Kleinschreibung unabhängige Vergleiche für die gesamte Bandbreite der Unicode-Zeichen bereitzustellen.