sql >> Database >  >> RDS >> SQLite

3 manieren om rijen te vinden die hoofdletters bevatten in SQLite

Hier zijn drie opties voor het retourneren van rijen die hoofdletters 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 die hoofdletters bevatten te retourneren.

Optie 1:Vergelijk met de LOWER() Tekenreeks

We kunnen de LOWER() . gebruiken functie om de oorspronkelijke waarde te vergelijken met het equivalent in kleine letters:

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

Resultaat:

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

Door het gebruik van de niet gelijk aan (<> ) operator (u kunt ook != in plaats van <> als je wilt), retourneren we alleen die rijen die verschillen van hun equivalenten in kleine letters. De reden dat we dit doen is omdat, als een waarde hetzelfde is als het equivalent in kleine letters, het al in kleine letters 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 hoofdletters É . niet zijn geretourneerd en Ø tenzij de waarde ook een niet-unicode hoofdletter bevat. SQLite ondersteunt unicode-tekens niet volledig. Bijvoorbeeld de LOWER() en UPPER() 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 kleine letters.

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 elk hoofdletter bevat dat we willen matchen:

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

Resultaat:

c1            
--------------
CAFÉ          
Café          
eCafé         
James Bond 007
JB 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é          
eCafé         
James Bond 007
JB 007        
É             
É 123         
Ø             

Optie 3:vergelijken met een reeks tekens

Een andere manier om dit te doen is door het bereik van hoofdletters op te geven dat we willen matchen:

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

Resultaat:

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

  1. INSERT COMMAND ::FOUT:kolomwaarde bestaat niet

  2. Gebruik FILEGROUP_ID() om de ID van een bestandsgroep in SQL Server te retourneren

  3. Hoe kom je aan het einde van een dag?

  4. Verschil tussen sleutel, primaire sleutel, unieke sleutel en index in MySQL