Ecco tre opzioni per restituire righe che contengono caratteri minuscoli in SQLite.
Dati campione
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 minuscole.
Opzione 1:confronta con UPPER()
Stringa
Possiamo usare UPPER()
funzione per confrontare il valore originale con il suo equivalente maiuscolo:
SELECT c1 FROM t1
WHERE UPPER(c1) <> c1;
Risultato:
c1 -------------- Café café 1café eCafé James Bond 007
Utilizzando il diverso a (<>
) operatore (puoi in alternativa usare !=
invece di <>
se preferisci), restituiamo solo quelle righe che sono diverse dai loro equivalenti maiuscoli. Il motivo per cui lo facciamo è perché, se un valore è uguale al suo equivalente maiuscolo, all'inizio era già maiuscolo (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 unicode minuscoli é
e ø
a meno che il valore non includa anche una lettera minuscola non Unicode. SQLite non supporta completamente i caratteri Unicode. Ad esempio, il UPPER()
e LOWER()
le funzioni forniscono solo la mappatura dei casi per le 26 lettere utilizzate nella lingua inglese. Pertanto, l'esempio sopra non ha convertito i caratteri Unicode nel loro equivalente maiuscolo.
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 minuscolo che vogliamo abbinare:
SELECT c1 FROM t1
WHERE c1 REGEXP '[abcdefghijklmnopqrstuvwxyz]';
Risultato:
c1 -------------- Café café 1café eCafé James Bond 007
Possiamo includere caratteri Unicode nel nostro elenco se lo desideriamo:
SELECT c1 FROM t1
WHERE c1 REGEXP '[éøabcdefghijklmnopqrstuvwxyz]';
Risultato:
c1 -------------- Café café 1café eCafé James Bond 007 é é 123 ø
Opzione 3:confronta con un intervallo di caratteri
Un altro modo per farlo è specificare l'intervallo di caratteri minuscoli che vogliamo abbinare:
SELECT c1 FROM t1
WHERE c1 REGEXP '[a-z]';
Risultato:
c1 -------------- Café café 1café eCafé James Bond 007