PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

2 начина за връщане на редове, които съдържат небуквени и цифрови знаци в PostgreSQL

По-долу са две опции за връщане на редове, които съдържат само небуквени и цифрови знаци в PostgreSQL.

Небуквени и цифрови знаци включват препинателни знаци като [email protected]#&()–[{}]:;',?/* и символи като `~$^+=<>“ , както и празни знаци като интервалите или табулацията.

Примерни данни

Ще използваме следните данни за нашите примери:

SELECT c1 FROM t1;

Резултат:

+----------------------+
| 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                |
+----------------------+

Опция 1:Сравнете с [:alnum:]

Можем да използваме !~ на PostgreSQL оператор, за да сравните нашата колона с регулярен израз. Използваме този оператор, когато искаме да посочим, че стойността не съвпада с регулярния израз.

Възможността за регулярни изрази на MySQL включва поддръжка за POSIX символните класове. Следователно можем да използваме [:alnum:] POSIX символен клас в нашия регулярен израз.

SELECT c1 FROM t1 
WHERE c1 !~ '[[:alnum:]]';

Резултат:

 ()
 [email protected]#&()–[{}]:;',?/*
 `~$^+=<>“
 

Празният низ също е числово-цифров и този пример върна реда, който съдържа празния низ.

Можем да изключим празни низове, като използваме NULLIF() :

SELECT c1 FROM t1 
WHERE NULLIF(c1, '') !~ '[[:alnum:]]';

Резултат:

 ()
 [email protected]#&()–[{}]:;',?/*
 `~$^+=<>“

Опция 2:Посочете диапазон от знаци

Друг начин да го направите е да посочите диапазон от знаци във вашия регулярен израз.

Пример:

SELECT c1 FROM t1
WHERE c1 !~ '[A-Za-z0-9]';

Резултат:

 ()
 [email protected]#&()–[{}]:;',?/*
 `~$^+=<>“
 
 é
 É
 ø

И за да премахнете празния низ:

SELECT c1 FROM t1
WHERE NULLIF(c1, '') !~ '[A-Za-z0-9]';

Резултат:

 ()
 [email protected]#&()–[{}]:;',?/*
 `~$^+=<>“
 
 é
 É
 ø

В този случай моят диапазон на изключване не обхваща буквено-цифрови знаци като é , É и ø , и така изходът не е истинско представяне на небуквени и цифрови знаци. Въпреки това, поне този метод ви дава възможност да посочите точните знаци, които искате да включите или изключите от резултата.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да вмъкна JSON обект в Postgres с помощта на Java readyStatement?

  2. Как Extract() работи в PostgreSQL

  3. Поточно репликация на PostgreSQL срещу логическа репликация

  4. Връзка не съществува

  5. Как да напиша DataFrame в таблицата на postgres?