PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

2 sposoby zwracania wierszy zawierających tylko znaki alfanumeryczne w PostgreSQL

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najlepsze praktyki dotyczące rejestrowania audytu PostgreSQL

  2. Jak pogrupować znaczniki czasu w wyspy (na podstawie arbitralnej luki)?

  3. Jak parsować JSON w postgresql

  4. JPA flush vs commit

  5. Dlaczego pg_restore zwraca pomyślnie, ale w rzeczywistości nie przywraca mojej bazy danych?