SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Wie man den LIKE-Operator von SQLite zwischen Groß- und Kleinschreibung unterscheidet

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.