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