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

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

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

Буквено-цифровите знаци са букви и цифри.

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

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

SELECT c1 FROM t1;

Резултат:

 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 оператор, за да сравни стойността с регулярен израз.

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

SELECT c1 FROM t1 
WHERE c1 ~ '^[[:alnum:]]+$';

Резултат:

 Music
 Café
 007
 é
 É
 ø

Това връща само стойностите, които се състоят само от буквено-цифрови знаци. Ако един ред съдържа както буквено-цифрови, така и не-буквени знаци, той не се връща.

Обърнете внимание, че символът за интервал се счита за небуквен и цифров и така, ако искаме да включим интервали, можем да направим това:

SELECT c1 FROM t1 
WHERE c1 ~ '^[[:alnum:] ]+$';

Резултат:

 Music
 Live Music
 Café
 Café Del Mar
 100 Cafés
 Player 456
 007
 é
 É
 é 123
 ø
 ø 123

За да върнете всички редове, които съдържат буквено-цифрови знаци (дори редът да съдържа и не-буквени знаци), можем да направим това:

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

Резултат:

 Music
 Live Music
 Café
 Café Del Mar
 100 Cafés
 [email protected]
 1 + 1
 $1.50
 Player 456
 007
 é
 É
 é 123
 ø
 ø 123

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

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

Пример:

SELECT c1 FROM t1
WHERE c1 ~ '^[A-Za-z0-9]+$';

Резултат:

 Music
 007

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

Ето защо си струва да бъдете особено внимателни, когато използвате този метод. Ще бъде лесно случайно да изключите знаци, които трябва да включите.

Въпреки това, в съответствие с този диапазон, можем да включим интервали като това:

SELECT c1 FROM t1 
WHERE c1 ~ '^[A-Za-z0-9 ]+$';

Резултат:

 Music
 Live Music
 Player 456
 007

И можем да използваме следното, за да включим всички редове, които съдържат знаци от нашия диапазон (дори и те да съдържат знаци извън този диапазон):

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

Резултат:

 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. Въведение в PostgreSQL

  2. Показване на избраните резултати вертикално в psql, както се прави от \G на MySQL

  3. Подготвено изявление за Postgresql в Rails

  4. Как да отпечатате резултата от PostgreSQL заявка във формат CSV или TSV от командния ред?

  5. Как да нулирате последователността за идентификатори на PostgreSQL таблици