Her er tre muligheder for at returnere rækker, der indeholder små bogstaver i SQLite.
Eksempeldata
Antag, at vi har en tabel med følgende data:
.nullvalue null
SELECT c1 FROM t1;
Resultat:
c1 -------------- CAFÉ Café café 1café eCafé James Bond 007 JB 007 007 null É É 123 é é 123 ø Ø
Vi kan bruge følgende metoder til at returnere de rækker, der indeholder små bogstaver.
Mulighed 1:Sammenlign med UPPER()
Streng
Vi kan bruge UPPER()
funktion til at sammenligne den oprindelige værdi med dens ækvivalent med store bogstaver:
SELECT c1 FROM t1
WHERE UPPER(c1) <> c1;
Resultat:
c1 -------------- Café café 1café eCafé James Bond 007
Ved at bruge ikke lig med (<> ) operator (du kan alternativt bruge
!=
i stedet for <> hvis du foretrækker det), returnerer vi kun de rækker, der er forskellige fra deres store bogstaver. Grunden til, at vi gør dette, er, at hvis en værdi er den samme som dens store bogstaver, så var den allerede store bogstaver til at begynde med (og vi ønsker ikke at returnere den).
SQLite udfører en søgning, der skelner mellem store og små bogstaver, og vi behøver derfor ikke at gøre andet for at få det resultat, vi ønsker.
Du har måske bemærket, at ovenstående eksempel ikke returnerede de små unicode-tegn é
og ø
medmindre værdien også indeholdt et ikke-unicode lille bogstav. SQLite understøtter ikke fuldt ud unicode-tegn. For eksempel UPPER()
og LOWER()
Funktioner giver kun sagstilknytning for de 26 bogstaver, der bruges på det engelske sprog. Derfor konverterede ovenstående eksempel ikke nogen unicode-tegn til deres store bogstaver.
Tag et kig på SQLite ICU-udvidelsen, hvis du skal arbejde med unicode-tegn.
Mulighed 2:Sammenlign med de faktiske tegn
En anden mulighed er at bruge REGEXP
operator med et regulært udtryksmønster, der eksplicit inkluderer hvert lille bogstav, vi ønsker at matche:
SELECT c1 FROM t1
WHERE c1 REGEXP '[abcdefghijklmnopqrstuvwxyz]';
Resultat:
c1 -------------- Café café 1café eCafé James Bond 007
Vi kan inkludere unicode-tegn i vores liste, hvis vi ønsker det:
SELECT c1 FROM t1
WHERE c1 REGEXP '[éøabcdefghijklmnopqrstuvwxyz]';
Resultat:
c1 -------------- Café café 1café eCafé James Bond 007 é é 123 ø
Mulighed 3:Sammenlign med en række tegn
En anden måde at gøre det på er at angive rækken af små bogstaver, vi ønsker at matche:
SELECT c1 FROM t1
WHERE c1 REGEXP '[a-z]';
Resultat:
c1 -------------- Café café 1café eCafé James Bond 007