Hier zijn drie opties voor het retourneren van rijen die kleine letters bevatten in SQLite.
Voorbeeldgegevens
Stel dat we een tabel hebben met de volgende gegevens:
.nullvalue null
SELECT c1 FROM t1;
Resultaat:
c1 -------------- CAFÉ Café café 1café eCafé James Bond 007 JB 007 007 null É É 123 é é 123 ø Ø
We kunnen de volgende methoden gebruiken om de rijen met kleine letters te retourneren.
Optie 1:Vergelijk met de UPPER()
Tekenreeks
We kunnen de UPPER()
. gebruiken functie om de oorspronkelijke waarde te vergelijken met het equivalent in hoofdletters:
SELECT c1 FROM t1
WHERE UPPER(c1) <> c1;
Resultaat:
c1 -------------- Café café 1café eCafé James Bond 007
Door het gebruik van de niet gelijk aan (<>
) operator (u kunt ook !=
in plaats van <>
als je dat liever hebt), retourneren we alleen die rijen die verschillen van hun equivalenten in hoofdletters. De reden dat we dit doen is omdat, als een waarde hetzelfde is als het equivalent in hoofdletters, het in het begin al in hoofdletters was (en we willen het niet teruggeven).
SQLite voert een hoofdlettergevoelige zoekopdracht uit, dus we hoeven niets anders te doen om het gewenste resultaat te krijgen.
Het is je misschien opgevallen dat in het bovenstaande voorbeeld de unicode-tekens in kleine letters é
. niet zijn geretourneerd en ø
tenzij de waarde ook een niet-unicode kleine letter bevat. SQLite ondersteunt unicode-tekens niet volledig. Bijvoorbeeld de UPPER()
en LOWER()
functies bieden alleen case mapping voor de 26 letters die in de Engelse taal worden gebruikt. Daarom converteerde het bovenstaande voorbeeld geen Unicode-tekens naar hun equivalent in hoofdletters.
Bekijk de SQLite ICU-extensie als u met unicode-tekens moet werken.
Optie 2:Vergelijk met de werkelijke karakters
Een andere optie is om de REGEXP
. te gebruiken operator met een patroon voor reguliere expressies dat expliciet alle kleine letters bevat die we willen matchen:
SELECT c1 FROM t1
WHERE c1 REGEXP '[abcdefghijklmnopqrstuvwxyz]';
Resultaat:
c1 -------------- Café café 1café eCafé James Bond 007
We kunnen Unicode-tekens in onze lijst opnemen als we dat willen:
SELECT c1 FROM t1
WHERE c1 REGEXP '[éøabcdefghijklmnopqrstuvwxyz]';
Resultaat:
c1 -------------- Café café 1café eCafé James Bond 007 é é 123 ø
Optie 3:vergelijken met een reeks tekens
Een andere manier om dit te doen is om het bereik van kleine letters te specificeren dat we willen matchen:
SELECT c1 FROM t1
WHERE c1 REGEXP '[a-z]';
Resultaat:
c1 -------------- Café café 1café eCafé James Bond 007