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

3 modi per trovare righe che contengono lettere maiuscole in SQLite

Ecco tre opzioni per restituire righe che contengono caratteri maiuscoli in SQLite.

Dati di esempio

Supponiamo di avere una tabella con i seguenti dati:

.nullvalue null
SELECT c1 FROM t1;

Risultato:

c1            
--------------
CAFÉ          
Café          
café          
1café         
eCafé         
James Bond 007
JB 007        
007           
null          
              
É             
É 123         
é             
é 123         
ø             
Ø             

Possiamo usare i seguenti metodi per restituire le righe che contengono lettere maiuscole.

Opzione 1:confronta con LOWER() Stringa

Possiamo usare il LOWER() funzione per confrontare il valore originale con il suo equivalente minuscolo:

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

Risultato:

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

Utilizzando il diverso a (<> ) operatore (puoi in alternativa usare != invece di <> se preferisci), restituiamo solo quelle righe che sono diverse dai loro equivalenti minuscoli. Il motivo per cui lo facciamo è perché, se un valore è uguale al suo equivalente minuscolo, all'inizio era già minuscolo (e non vogliamo restituirlo).

SQLite esegue una ricerca con distinzione tra maiuscole e minuscole, quindi non abbiamo bisogno di fare nient'altro per ottenere il risultato che desideriamo.

Potresti aver notato che l'esempio sopra non ha restituito i caratteri maiuscoli unicode É e Ø a meno che il valore non includa anche una lettera maiuscola non Unicode. SQLite non supporta completamente i caratteri Unicode. Ad esempio, il LOWER() e UPPER() le funzioni forniscono solo la mappatura dei casi per le 26 lettere utilizzate nella lingua inglese. Pertanto, l'esempio sopra non ha convertito alcun carattere Unicode nel loro equivalente minuscolo.

Dai un'occhiata all'estensione ICU di SQLite se hai bisogno di lavorare con i caratteri Unicode.

Opzione 2:confronta con i caratteri reali

Un'altra opzione è usare il REGEXP operatore con un modello di espressione regolare che include esplicitamente ogni carattere maiuscolo che vogliamo abbinare:

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

Risultato:

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

Possiamo includere caratteri Unicode nel nostro elenco se lo desideriamo:

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

Risultato:

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

Opzione 3:confronta con un intervallo di caratteri

Un altro modo per farlo è specificare l'intervallo di caratteri maiuscoli che vogliamo abbinare:

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

Risultato:

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