MariaDB
 sql >> Database >  >> RDS >> MariaDB

4 modi per trovare righe che contengono lettere minuscole in MariaDB

Ecco quattro opzioni per restituire le righe che contengono caratteri minuscoli in MariaDB.

Dati di esempio

Supponiamo di avere una tabella con i seguenti dati:

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 una classe di caratteri POSIX

Possiamo usare il REGEXP per eseguire una corrispondenza di un modello di espressione regolare.

Un'opzione semplice è confrontare la nostra colonna con [:lower:] Classe di caratteri POSIX:

SELECT c1 FROM t1
WHERE c1 REGEXP '[[:lower:]]';

Risultato:

+----------------+
| c1             |
+----------------+
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
| é              |
| é 123          |
| ø              |
+----------------+

RLIKE è sinonimo di REGEXP , così possiamo sostituire REGEXP con RLIKE per ottenere lo stesso risultato:

SELECT c1 FROM t1
WHERE c1 RLIKE '[[:lower:]]';

Opzione 2:confronta con UPPER() Stringa

Un'altra opzione è usare UPPER() funzione per confrontare il valore originale con il suo equivalente maiuscolo:

SELECT c1 FROM t1
WHERE BINARY UPPER(c1) <> BINARY c1;

Risultato:

+----------------+
| c1             |
+----------------+
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
| é              |
| é 123          |
| ø              |
+----------------+

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).

Per impostazione predefinita, MariaDB esegue una ricerca senza distinzione tra maiuscole e minuscole, quindi utilizzo il BINARY operatore per ottenere una ricerca con distinzione tra maiuscole e minuscole.

Questo può anche essere fatto in questo modo:

SELECT c1 FROM t1
WHERE BINARY(UPPER(c1)) <> BINARY(c1);

Opzione 3: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 BINARY c1 REGEXP BINARY '[abcdefghijklmnopqrstuvwxyz]';

Risultato:

+----------------+
| c1             |
+----------------+
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
+----------------+

Questa volta vengono restituite meno righe rispetto agli esempi precedenti. Questo perché non ho specificato caratteri come é e ø , che sono stati restituiti in quegli esempi. Il nostro risultato contiene é ma quella riga è stata restituita solo perché contiene anche altri caratteri minuscoli che fa corrispondenza.

Pertanto, se utilizzi questa opzione, dovrai assicurarti di aver coperto tutti i caratteri validi.

Opzione 4:confronta con un intervallo di caratteri

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

SELECT c1 FROM t1
WHERE BINARY c1 REGEXP BINARY '[a-z]';

Risultato:

+----------------+
| c1             |
+----------------+
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
+----------------+