Per impostazione predefinita, SQLite LIKE
l'operatore non fa distinzione tra maiuscole e minuscole per i caratteri ASCII. Ciò significa che corrisponderà ai caratteri maiuscoli e minuscoli, indipendentemente da quale maiuscolo utilizzi nel tuo modello.
Tuttavia, esiste una tecnica che puoi utilizzare per fare distinzione tra maiuscole e minuscole.
SQLite ha un'istruzione PRAGMA chiamata case_sensitive_like , che è progettato per rendere specificamente il LIKE
operatore con distinzione tra maiuscole e minuscole per i caratteri ASCII.
Il motivo per cui ho specificato "caratteri ASCII" è perché LIKE
l'operatore fa distinzione tra maiuscole e minuscole per impostazione predefinita per i caratteri Unicode che sono oltre l'intervallo ASCII.
Pertanto, se hai bisogno del LIKE
operatore per distinguere tra maiuscole e minuscole nell'intervallo ASCII, il case_sensitive_like La dichiarazione PRAGMA potrebbe essere quello che stai cercando.
Questo vale anche per like()
funzione, che funziona esattamente come LIKE
operatore.
Abilitazione/Disabilitazione della distinzione tra maiuscole e minuscole
Puoi utilizzare uno dei seguenti valori booleani per abilitare la distinzione tra maiuscole e minuscole:
1
on
true
yes
Puoi utilizzare uno dei seguenti valori booleani per disabilitare la distinzione tra maiuscole e minuscole:
0
off
false
no
L'argomento può essere tra parentesi o può essere separato dal nome pragma da un segno di uguale.
Gli argomenti delle parole chiave possono facoltativamente apparire tra virgolette.
Esempio senza distinzione tra maiuscole e minuscole
Per prima cosa vediamo cosa succede quando non utilizziamo il case_sensitive_like Dichiarazione PRAGMA.
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
Risultato:
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 1 0
In questo caso, la prima colonna non fa distinzione tra maiuscole e minuscole:la A maiuscola corrisponde alla a minuscola .
Ed ecco una query su una tabella di database.
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Risultato:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
In questo caso, otteniamo una corrispondenza contro tutti i gatti i cui nomi iniziano con Br , anche se i nostri criteri utilizzavano una b minuscola .
Esempio case-sensitive
Ora vediamo cosa succede quando utilizziamo case_sensitive_like Istruzione PRAGMA per abilitare la distinzione tra maiuscole e minuscole nell'intervallo ASCII.
PRAGMA case_sensitive_like = 1;
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
Risultato:
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 0 0
Quindi questa volta la A maiuscola non corrisponde alla a minuscola .
Ed ecco l'esempio del database dopo aver abilitato la distinzione tra maiuscole e minuscole.
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Risultato:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 0 Brash 0 Broosh 0 100%Fluff 0 100$Fluff 0
Si noti che non avevo bisogno di eseguire nuovamente l'istruzione PRAGMA. L'impostazione rimane attiva per la mia connessione finché non la modifico.
Disabilita la distinzione tra maiuscole e minuscole
Ecco un esempio di disabilitazione della distinzione tra maiuscole e minuscole e di eseguire nuovamente la query.
PRAGMA case_sensitive_like = 0;
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Risultato:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
La funzione Like()
Come accennato, il case_sensitive_like L'istruzione PRAGMA ha effetto anche su like()
funzione.
PRAGMA case_sensitive_like = 1;
SELECT
CatName,
like('Br%', CatName),
like('br%', CatName)
FROM Cats;
Risultato:
CatName like('Br%', CatName) like('br%', CatName) ---------- -------------------- -------------------- Brush 1 0 Brash 1 0 Broosh 1 0 100%Fluff 0 0 100$Fluff 0 0
Operatore LIKE sensibile a Unicode
Puoi anche utilizzare l'estensione ICU SQLite se hai bisogno di un LIKE
compatibile con unicode operatore.
L'implementazione di LIKE
incluso in questa estensione utilizza la funzione ICU u_foldCase()
per fornire confronti indipendenti tra maiuscole e minuscole per l'intera gamma di caratteri Unicode.