Níže jsou dvě možnosti pro vrácení řádků, které v PostgreSQL obsahují pouze nealfanumerické znaky.
Nealfanumerické znaky zahrnují interpunkční znaménka 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:
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 !~
PostgreSQL operátor k porovnání našeho sloupce s regulárním výrazem. Tento operátor používáme, když chceme určit, že hodnota neodpovídá regulárnímu výrazu.
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šem regulárním výrazu.
SELECT c1 FROM t1
WHERE c1 !~ '[[:alnum:]]';
Výsledek:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“
Prázdný řetězec je také číselně-numerický, takže tento příklad vrátil řádek, který obsahuje prázdný řetězec.
Prázdné řetězce můžeme vyloučit pomocí NULLIF()
:
SELECT c1 FROM t1
WHERE NULLIF(c1, '') !~ '[[:alnum:]]';
Výsledek:
() [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 !~ '[A-Za-z0-9]';
Výsledek:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“ é É ø
A pro odstranění prázdného řetězce:
SELECT c1 FROM t1
WHERE NULLIF(c1, '') !~ '[A-Za-z0-9]';
Výsledek:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“ é É ø
V tomto případě můj rozsah vyloučení nezahrnoval 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.