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

2 sposoby zwracania wierszy zawierających znaki niealfanumeryczne w PostgreSQL

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ScaleGrid PostgreSQL w infrastrukturze chmury VMware

  2. Zrozumienie operacji wsadowych JDBC

  3. Odpowiedniki HEX() i UNHEX() MySQL w Postgresie?

  4. PostgreSQL:domyślne nazwy ograniczeń

  5. Funkcja SQL jest bardzo powolna w porównaniu z zapytaniem bez opakowania funkcji