Par défaut, le SQLite LIKE
L'opérateur est insensible à la casse pour les caractères ASCII. Cela signifie qu'il correspondra aux caractères majuscules et minuscules, quelle que soit la casse que vous utilisez dans votre modèle.
Cependant, il existe une technique que vous pouvez utiliser pour la rendre sensible à la casse.
SQLite a une instruction PRAGMA appelée case_sensitive_like , qui est conçu pour faire spécifiquement le LIKE
opérateur sensible à la casse pour les caractères ASCII.
La raison pour laquelle je spécifie "caractères ASCII" est que le LIKE
l'opérateur est sensible à la casse par défaut pour les caractères unicode qui sont au-delà de la plage ASCII.
Par conséquent, si vous avez besoin du LIKE
l'opérateur doit être sensible à la casse dans la plage ASCII, le case_sensitive_like La déclaration PRAGMA pourrait être ce que vous recherchez.
Ceci s'applique également au like()
fonction, qui fonctionne exactement de la même manière que la fonction LIKE
opérateur.
Activer/Désactiver la sensibilité à la casse
Vous pouvez utiliser l'une des valeurs booléennes suivantes pour activer la sensibilité à la casse :
1
on
true
yes
Vous pouvez utiliser l'une des valeurs booléennes suivantes pour désactiver la sensibilité à la casse :
0
off
false
no
L'argument peut être entre parenthèses ou il peut être séparé du nom du pragma par un signe égal.
Les arguments de mot-clé peuvent éventuellement apparaître entre guillemets.
Exemple insensible à la casse
Voyons d'abord ce qui se passe lorsque nous n'utilisons pas le case_sensitive_like Déclaration PRAGMA.
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
Résultat :
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 1 0
Dans ce cas, la première colonne est insensible à la casse - le A majuscule correspond à la minuscule a .
Et voici une requête sur une table de base de données.
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Résultat :
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
Dans ce cas, nous obtenons une correspondance contre tous les chats dont les noms commencent par Br , même si nos critères utilisaient un b minuscule .
Exemple sensible à la casse
Voyons maintenant ce qui se passe lorsque nous utilisons le case_sensitive_like Instruction PRAGMA pour activer la sensibilité à la casse dans la plage ASCII.
PRAGMA case_sensitive_like = 1;
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
Résultat :
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 0 0
Donc cette fois le A majuscule n'est pas correspond à la minuscule a .
Et voici l'exemple de base de données après avoir activé la sensibilité à la casse.
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Résultat :
CatName CatName LIKE 'br%' ---------- ------------------ Brush 0 Brash 0 Broosh 0 100%Fluff 0 100$Fluff 0
Notez que je n'ai pas eu besoin d'exécuter à nouveau l'instruction PRAGMA. Le paramètre reste en place pour ma connexion jusqu'à ce que je le modifie.
Désactiver la sensibilité à la casse
Voici un exemple de désactivation de la sensibilité à la casse et d'exécution de la requête à nouveau.
PRAGMA case_sensitive_like = 0;
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Résultat :
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
La fonction Like()
Comme mentionné, le case_sensitive_like L'instruction PRAGMA affecte également le like()
fonction.
PRAGMA case_sensitive_like = 1;
SELECT
CatName,
like('Br%', CatName),
like('br%', CatName)
FROM Cats;
Résultat :
CatName like('Br%', CatName) like('br%', CatName) ---------- -------------------- -------------------- Brush 1 0 Brash 1 0 Broosh 1 0 100%Fluff 0 0 100$Fluff 0 0
Opérateur LIKE compatible Unicode
Vous pouvez également utiliser l'extension SQLite ICU si vous avez besoin d'un LIKE
compatible Unicode opérateur.
L'implémentation de LIKE
inclus dans cette extension utilise la fonction ICU u_foldCase()
pour fournir des comparaisons indépendantes de la casse pour la gamme complète de caractères Unicode.