sql >> Databáze >  >> RDS >> MariaDB

4 způsoby, jak najít řádky, které obsahují velká písmena v MariaDB

Zde jsou čtyři možnosti pro vrácení řádků, které obsahují velká písmena v MariaDB.

Ukázková data

Předpokládejme, že máme tabulku s následujícími údaji:

SELECT c1 FROM t1;

Výsledek:

+----------------+
| c1             |
+----------------+
| CAFÉ           |
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
| JB 007         |
| 007            |
| NULL           |
|                |
| É              |
| É 123          |
| é              |
| é 123          |
| ø              |
| Ø              |
+----------------+

K vrácení řádků, které obsahují velká písmena, můžeme použít následující metody.

Možnost 1:Porovnání s třídou znaků POSIX

Můžeme použít REGEXP operátor k provedení shody vzoru regulárního výrazu.

Jednoduchou možností je porovnat náš sloupec s [:upper:] Třída znaků POSIX:

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

Výsledek:

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

RLIKE je synonymem pro REGEXP , takže můžeme nahradit REGEXP s RLIKE získat stejný výsledek:

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

Možnost 2:Porovnejte s LOWER() Řetězec

Další možností je použít LOWER() funkce pro porovnání původní hodnoty s jejím malým ekvivalentem:

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

Výsledek:

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

Pomocí nerovná se (<> ) operátor (můžete také použít != místo <> pokud chcete), vracíme pouze ty řádky, které se liší od jejich malých ekvivalentů. Důvodem, proč to děláme, je to, že pokud je hodnota stejná jako její ekvivalent malým písmenem, pak již byla na začátku malá (a my to nechceme vracet).

Ve výchozím nastavení MariaDB provádí vyhledávání bez ohledu na velikost písmen, a proto používám BINARY operátor pro vyhledávání rozlišující malá a velká písmena.

To lze provést také takto:

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

Možnost 3:Porovnejte se skutečnými postavami

Další možností je použít REGEXP operátor se vzorem regulárního výrazu, který explicitně zahrnuje každý velký znak, který chceme porovnat:

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

Výsledek:

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

Tentokrát je vráceno méně řádků než v předchozích příkladech. Je to proto, že jsem nespecifikoval znaky jako É a Ø , které byly vráceny v předchozím příkladu. Náš výsledek obsahuje É ale tento řádek byl vrácen pouze proto, že obsahuje také další velká písmena, která dělají zápas.

Pokud tedy použijete tuto možnost, musíte se ujistit, že máte pokryty všechny platné znaky.

Možnost 4:Porovnejte s řadou znaků

Dalším způsobem, jak to udělat, je zadat rozsah znaků, které chceme porovnat:

SELECT c1 FROM t1
WHERE BINARY c1 REGEXP BINARY '[A-Z]';

Výsledek:

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

  1. Exportujte databázi MySQL/MariaDB

  2. connect ECONNREFUSED - node js , sql

  3. Odhadněte úspory komprese dat na serveru SQL Server

  4. Jak získat hodnotu ASCII v Oracle?