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

4 modi per trovare righe che contengono lettere maiuscole in MariaDB

Ecco quattro opzioni per restituire le righe che contengono caratteri maiuscoli 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 maiuscole.

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 [:upper:] Classe di caratteri POSIX:

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

Risultato:

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

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

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

Opzione 2:confronta con LOWER() Stringa

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

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

Risultato:

+----------------+
| c1             |
+----------------+
| CAFÉ           |
| Café           |
| eCafé          |
| James Bond 007 |
| JB 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 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).

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(LOWER(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 maiuscolo che vogliamo abbinare:

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

Risultato:

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

Questa volta vengono restituite meno righe rispetto agli esempi precedenti. Questo perché non ho specificato caratteri come É e Ø , restituiti nell'esempio precedente. Il nostro risultato contiene É ma quella riga è stata restituita solo perché contiene anche altri caratteri maiuscoli 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é           |
| eCafé          |
| James Bond 007 |
| JB 007         |
+----------------+