Poniżej znajdują się dwie metody zwracania wierszy zawierających tylko znaki alfanumeryczne w PostgreSQL.
Znaki alfanumeryczne to znaki alfabetu i znaki numeryczne.
Przykładowe dane
W naszych przykładach użyjemy następujących danych:
SELECT c1 FROM t1;
Wynik:
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ć ~
PostgreSQLa operator do porównania wartości z wyrażeniem regularnym.
Możliwości wyrażeń regularnych PostgreSQL obejmują obsługę klas znaków POSIX. Dlatego możemy użyć [:alnum:]
Klasa znaków POSIX w naszych wyrażeniach regularnych do znajdowania wierszy zawierających znaki alfanumeryczne.
SELECT c1 FROM t1
WHERE c1 ~ '^[[:alnum:]]+$';
Wynik:
Music Café 007 é É ø
To zwraca tylko wartości składające się wyłącznie ze znaków alfanumerycznych. Jeśli wiersz zawiera zarówno znaki alfanumeryczne, jak i niealfanumeryczne, nie jest on zwracany.
Zwróć uwagę, że znak spacji jest uważany za niealfanumeryczny, więc jeśli chcemy uwzględnić spacje, możemy to zrobić:
SELECT c1 FROM t1
WHERE c1 ~ '^[[:alnum:] ]+$';
Wynik:
Music Live Music Café Café Del Mar 100 Cafés Player 456 007 é É é 123 ø ø 123
Aby zwrócić wszystkie wiersze, które zawierają znaki alfanumeryczne (nawet jeśli wiersz zawiera również znaki niealfanumeryczne), możemy to zrobić:
SELECT c1 FROM t1
WHERE c1 ~ '[[:alnum:]]';
Wynik:
Music Live Music Café Café Del Mar 100 Cafés [email protected] 1 + 1 $1.50 Player 456 007 é É é 123 ø ø 123
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:
Music 007
Zauważysz, że zwróciło to mniej wierszy niż w naszym pierwszym przykładzie. To dlatego, że nie dodałem é
, É
lub ø
znaków w moim zakresie, więc wszystkie wiersze zawierające te znaki są wykluczane z danych wyjściowych.
Dlatego warto zachować szczególną ostrożność podczas korzystania z tej metody. Łatwo byłoby przypadkowo wykluczyć znaki, które należy uwzględnić.
Jednak trzymając się tego zakresu, możemy uwzględnić spacje takie jak:
SELECT c1 FROM t1
WHERE c1 ~ '^[A-Za-z0-9 ]+$';
Wynik:
Music Live Music Player 456 007
I możemy użyć poniższego, aby uwzględnić wszystkie wiersze, które zawierają znaki z naszego zakresu (nawet jeśli zawierają również znaki spoza tego zakresu):
SELECT c1 FROM t1
WHERE c1 ~ '[A-Za-z0-9]';
Wynik:
Music Live Music Café Café Del Mar 100 Cafés [email protected] 1 + 1 $1.50 Player 456 007 é 123 ø 123