Som standard er SQLite LIKE
operatoren skelner mellem store og små bogstaver for ASCII-tegn. Det betyder, at det vil matche store og små bogstaver, uanset hvilket bogstav du bruger i dit mønster.
Der er dog en teknik, du kan bruge til at gøre det skelet mellem store og små bogstaver.
SQLite har en PRAGMA-sætning kaldet casesensitive_like , som er designet til specifikt at lave LIKE
operatør skelner mellem store og små bogstaver for ASCII-tegn.
Grunden til at jeg angiver "ASCII-tegn" er, at LIKE
operatoren skelner som standard mellem store og små bogstaver for unicode-tegn, der er uden for ASCII-området.
Derfor, hvis du har brug for LIKE
operatoren skal være case-sensitive i ASCII-området, case_sensitive_like PRAGMA-erklæring kunne være det, du leder efter.
Dette gælder også for like()
funktion, som fungerer nøjagtigt det samme som LIKE
operatør.
Aktivere/deaktivere store og små bogstaver
Du kan bruge en hvilken som helst af følgende booleske værdier for at aktivere forskel på store og små bogstaver:
1
on
true
yes
Du kan bruge en af følgende booleske værdier til at deaktivere følsomhed mellem store og små bogstaver:
0
off
false
no
Argumentet kan enten stå i parentes, eller det kan være adskilt fra pragmanavnet med et lighedstegn.
Søgeordsargumenter kan valgfrit vises i anførselstegn.
Eksempel uden store og små bogstaver
Lad os først se, hvad der sker, når vi ikke bruger case_sensitive_like PRAGMA-udsagn.
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
Resultat:
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 1 0
I dette tilfælde er den første kolonne uafhængig af store og små bogstaver – det store A matcher små bogstaver a .
Og her er en forespørgsel mod en databasetabel.
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Resultat:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
I dette tilfælde får vi en kamp mod alle katte, hvis navne starter med Br , selvom vores kriterier brugte et lille b .
Eksempel på store og små bogstaver
Lad os nu se, hvad der sker, når vi bruger case-sensitive_like PRAGMA-sætning for at aktivere store og små bogstaver i ASCII-området.
PRAGMA case_sensitive_like = 1;
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
Resultat:
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 0 0
Så denne gang med store bogstaver A gør ikke match små bogstaver a .
Og her er databaseeksemplet efter aktivering af store og små bogstaver.
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Resultat:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 0 Brash 0 Broosh 0 100%Fluff 0 100$Fluff 0
Bemærk, at jeg ikke behøvede at køre PRAGMA-erklæringen igen. Indstillingen forbliver på plads for min forbindelse, indtil jeg ændrer den.
Deaktiver versalfølsomhed
Her er et eksempel på deaktivering af store og små bogstaver og kørsel af forespørgslen igen.
PRAGMA case_sensitive_like = 0;
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Resultat:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
Like()-funktionen
Som nævnt er case_sensitive_like PRAGMA-sætningen påvirker også like()
funktion.
PRAGMA case_sensitive_like = 1;
SELECT
CatName,
like('Br%', CatName),
like('br%', CatName)
FROM Cats;
Resultat:
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-Aware LIKE-operatør
Du kan også bruge SQLite ICU-udvidelsen, hvis du har brug for en unicode-bevidst LIKE
operatør.
Implementeringen af LIKE
inkluderet i denne udvidelse bruger ICU-funktionen u_foldCase()
at give kasus-uafhængige sammenligninger for hele rækken af unicode-tegn.