Poniżej znajdują się dwie opcje zwracania wierszy zawierających tylko znaki niealfanumeryczne w PostgreSQL.
Znaki inne niż alfanumeryczne obejmują znaki interpunkcyjne, takie jak [email protected]#&()–[{}]:;',?/*
i symbole takie jak `~$^+=<>“
, a także znaki odstępu, takie jak spacja lub tabulatory.
Przykładowe dane
W naszych przykładach użyjemy następujących danych:
SELECT c1 FROM t1;
Wynik:
+----------------------+ | 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 | +----------------------+
Opcja 1:Porównaj z [:alnum:]
Możemy użyć !~
PostgreSQL operator, aby porównać naszą kolumnę z wyrażeniem regularnym. Używamy tego operatora, gdy chcemy określić, że wartość nie pasuje do wyrażenia regularnego.
Możliwości wyrażeń regularnych MySQL obejmują obsługę klas znaków POSIX. Dlatego możemy użyć [:alnum:]
Klasa znaków POSIX w naszym wyrażeniu regularnym.
SELECT c1 FROM t1
WHERE c1 !~ '[[:alnum:]]';
Wynik:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“
Pusty ciąg jest również numeryczny, więc ten przykład zwrócił wiersz zawierający pusty ciąg.
Możemy wykluczyć puste ciągi za pomocą NULLIF()
:
SELECT c1 FROM t1
WHERE NULLIF(c1, '') !~ '[[:alnum:]]';
Wynik:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“
Opcja 2:Określ zakres znaków
Innym sposobem na to jest określenie zakresu znaków w wyrażeniu regularnym.
Przykład:
SELECT c1 FROM t1
WHERE c1 !~ '[A-Za-z0-9]';
Wynik:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“ é É ø
Aby usunąć pusty ciąg:
SELECT c1 FROM t1
WHERE NULLIF(c1, '') !~ '[A-Za-z0-9]';
Wynik:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“ é É ø
W tym przypadku mój zakres wykluczeń nie obejmował znaków alfanumerycznych, takich jak é
, É
i ø
, a więc dane wyjściowe nie są prawdziwą reprezentacją znaków niealfanumerycznych. To powiedziawszy, przynajmniej ta metoda daje możliwość określenia dokładnych znaków, które chcesz uwzględnić lub wykluczyć z wyniku.