sql >> Databáze >  >> RDS >> Mysql

2 způsoby, jak vrátit řádky, které obsahují pouze nealfanumerické znaky v MySQL

Níže jsou uvedeny dvě možnosti, jak v MySQL najít ty řádky, které obsahují pouze nealfanumerické znaky.

Nealfanumerické znaky zahrnují interpunkční znaky jako [email protected]#&()–[{}]:;',?/* a symboly jako `~$^+=<>“ , stejně jako mezery, jako jsou mezery nebo tabulátory.

Ukázková data

Pro naše příklady použijeme následující data:

CREATE TABLE t1 (
    c1 varchar(255) NULL
    );

INSERT INTO t1 VALUES
    ('Music'),
    ('Live Music'),
    ('Café'),
    ('Café Del Mar'),
    ('100 Cafés'),
    ('[email protected]'),
    ('1 + 1'),
    ('()'),
    ('[email protected]#&()–[{}]:;'',?/*'),
    ('`~$^+=<>“'),
    ('$1.50'),
    ('Player 456'),
    ('007'),
    (null),
    (''),
    ('é'),
    ('É'),
    ('é 123'),
    ('ø'),
    ('ø 123');
SELECT c1 FROM t1;

Výsledek:

+----------------------+
| c1                   |
+----------------------+
| Music                |
| Live Music           |
| Café                 |
| Café Del Mar         |
| 100 Cafés            |
| [email protected]    |
| 1 + 1                |
| ()                   |
| [email protected]#&()–[{}]:;',?/*   |
| `~$^+=<>“            |
| $1.50                |
| Player 456           |
| 007                  |
| NULL                 |
|                      |
| é                    |
| É                    |
| é 123                |
| ø                    |
| ø 123                |
+----------------------+

Možnost 1:Porovnejte s [:alnum:]

Můžeme použít REGEXP MySQL operátor k porovnání našeho sloupce s regulárním výrazem.

Schopnost regulárních výrazů MySQL zahrnuje podporu pro znakové třídy POSIX. Proto můžeme použít [:alnum:] Třída znaků POSIX v našich regulárních výrazech, abyste našli řádky, které obsahují pouze alfanumerické znaky, a poté to negujte pomocí NOT operátor.

SELECT c1 FROM t1 
WHERE c1 NOT REGEXP '[[:alnum:]]';

Výsledek:

+----------------------+
| c1                   |
+----------------------+
| ()                   |
| [email protected]#&()–[{}]:;',?/*   |
| `~$^+=<>“            |
|                      |
+----------------------+

Pokud potřebujete vyloučit konkrétní znak, můžete vždy použít NULLIF() funkce.

Vynechme například prázdný řetězec z posledního řádku:

SELECT c1 FROM t1
WHERE NULLIF(c1, '') NOT REGEXP '[[:alnum:]]';

Výsledek:

+----------------------+
| c1                   |
+----------------------+
| ()                   |
| [email protected]#&()–[{}]:;',?/*   |
| `~$^+=<>“            |
+----------------------+

Možnost 2:Určete rozsah znaků

Dalším způsobem, jak to udělat, je zadat rozsah znaků v regulárním výrazu.

Příklad:

SELECT c1 FROM t1
WHERE c1 NOT REGEXP '[A-Za-z0-9]';

Výsledek:

+----------------------+
| c1                   |
+----------------------+
| ()                   |
| [email protected]#&()–[{}]:;',?/*   |
| `~$^+=<>“            |
|                      |
| é                    |
| É                    |
| ø                    |
+----------------------+

A pro odstranění prázdného řetězce:

SELECT c1 FROM t1
WHERE NULLIF(c1, '') NOT REGEXP '[A-Za-z0-9]';

Výsledek:

+----------------------+
| c1                   |
+----------------------+
| ()                   |
| [email protected]#&()–[{}]:;',?/*   |
| `~$^+=<>“            |
| é                    |
| É                    |
| ø                    |
+----------------------+

V tomto případě můj rozsah vyloučení nepokrýval alfanumerické znaky jako é , É a ø , takže výstup není skutečnou reprezentací nealfanumerických znaků. To znamená, že alespoň tato metoda vám dává možnost určit přesné znaky, které chcete zahrnout nebo vyloučit z výsledku.

Alternativy k REGEXP

V MySQL, RLIKE a REGXP operátory jsou synonyma pro REGEXP_LIKE() . Proto můžeme kterýkoli z předchozích příkladů nahradit výrazem NOT RLIKE nebo NOT REGEXP_LIKE() .

Příklad RLIKE :

SELECT c1 FROM t1 
WHERE c1 NOT RLIKE '[[:alnum:]]';

Příklad REGEXP_LIKE() :

SELECT c1 FROM t1 
WHERE NOT REGEXP_LIKE(c1, '[[:alnum:]]');

  1. Použití `SELECT` k volání funkce

  2. Část 3 – Zákazníci, hovory a schůzky

  3. Přejmenování sloupce v SQL Server (T-SQL)

  4. Jak CAST() funguje v MariaDB