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 example@sqldat.com#&()–[{}]:;',?/* 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 |
| example@sqldat.com |
| 1 + 1 |
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
| $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:
()
example@sqldat.com#&()–[{}]:;',?/*
`~$^+=<>“
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:
()
example@sqldat.com#&()–[{}]:;',?/*
`~$^+=<>“
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:
()
example@sqldat.com#&()–[{}]:;',?/*
`~$^+=<>“
é
É
ø A pro odstranění prázdného řetězce:
SELECT c1 FROM t1
WHERE NULLIF(c1, '') !~ '[A-Za-z0-9]'; Výsledek:
()
example@sqldat.com#&()–[{}]:;',?/*
`~$^+=<>“
é
É
ø
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.