sql >> Database teknologi >  >> RDS >> SQLite

3 måder at finde rækker, der indeholder store bogstaver i SQLite

Her er tre muligheder for at returnere rækker, der indeholder store bogstaver i SQLite.

Eksempel på data

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 store bogstaver.

Mulighed 1:Sammenlign med LOWER() Streng

Vi kan bruge LOWER() funktion til at sammenligne den oprindelige værdi med dens tilsvarende små bogstaver:

SELECT c1 FROM t1
WHERE LOWER(c1) <> c1;

Resultat:

c1            
--------------
CAFÉ          
Café          
eCafé         
James Bond 007
JB 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 små bogstaver. Grunden til, at vi gør dette, er, at hvis en værdi er den samme som dens små bogstaver, så var den allerede små 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 store unicode-tegn É og Ø medmindre værdien også indeholdt et ikke-unicode stort bogstav. SQLite understøtter ikke fuldt ud unicode-tegn. For eksempel LOWER() og UPPER() 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 tilsvarende små 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 stort tegn, vi ønsker at matche:

SELECT c1 FROM t1
WHERE c1 REGEXP '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';

Resultat:

c1            
--------------
CAFÉ          
Café          
eCafé         
James Bond 007
JB 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é          
eCafé         
James Bond 007
JB 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 ​​store bogstaver, vi ønsker at matche:

SELECT c1 FROM t1
WHERE c1 REGEXP '[A-Z]';

Resultat:

c1            
--------------
CAFÉ          
Café          
eCafé         
James Bond 007
JB 007        

  1. Hvordan forbedres ydeevnen for dato- og tidsfiltrering i SQL Server?

  2. VÆLG * FRA flere tabeller. MySQL

  3. oracle forespørgsel sekventiel summering pr. rækker

  4. 3 måder at returnere tidszonen fra en DateTime-værdi i Oracle