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
example@sqldat.com
1 + 1
()
example@sqldat.com#&()–[{}]:;',?/*
`~$^+=<>“
$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 example@sqldat.com 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 example@sqldat.com 1 + 1 $1.50 Player 456 007 é 123 ø 123