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 | +----------------+