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

4 начина за намиране на редове, които съдържат главни букви в PostgreSQL

Ето четири опции за връщане на редове, които съдържат главни букви в PostgreSQL.

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

Да предположим, че имаме таблица със следните данни:

SELECT c1 FROM t1;

Резултат:

       c1       
----------------
 CAFÉ
 Café
 café
 1café
 eCafé
 James Bond 007
 JB 007
 007
 null
 
 É
 É 123
 é
 é 123
 ø
 Ø

Можем да използваме следните методи, за да върнем редовете, които съдържат главни букви.

Опция 1:Сравнете с POSIX клас символи

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

Една проста опция е да сравните нашата колона с [:upper:] POSIX клас символи:

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

Резултат:

       c1       
----------------
 CAFÉ
 Café
 eCafé
 James Bond 007
 JB 007
 É
 É 123
 Ø

Опция 2:Сравнете с LOWER() Низ

Друга възможност е да използвате LOWER() функция за сравняване на оригиналната стойност с нейния еквивалент с малки букви:

SELECT c1 FROM t1
WHERE LOWER(c1) <> c1;

Резултат:

       c1       
----------------
 CAFÉ
 Café
 eCafé
 James Bond 007
 JB 007
 É
 É 123
 Ø

Чрез използване на не е равно на (<> ) оператор (алтернативно можете да използвате != вместо <> ако предпочитате), ние връщаме само онези редове, които са различни от техните еквиваленти с малки букви. Причината да правим това е, че ако дадена стойност е същата като нейния еквивалент с малки букви, тогава тя вече е била с малки букви (и не искаме да я връщаме).

По подразбиране PostgreSQL извършва съвпадение, чувствително към малки и големи букви и затова не е необходимо да указваме съпоставяне, което е чувствително, за да получим желания резултат.

Опция 3:Сравнете с действителните знаци

Друга възможност е да използвате ~ оператор с модел на регулярен израз, който изрично включва всеки знак с главни букви, който искаме да съпоставим:

SELECT c1 FROM t1
WHERE c1 ~ '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';

Резултат:

       c1       
----------------
 CAFÉ
 Café
 eCafé
 James Bond 007
 JB 007

В този случай се връщат по-малко редове, отколкото в предишните примери. Това е така, защото не посочих знаци като É и Ø , които бяха върнати в тези примери. Нашият резултат съдържа É но този ред беше върнат само защото съдържа и други главни букви, които правят съвпадение.

Следователно тази опция е по-ограничена от предишната, но ви предоставя повече контрол върху знаците, които искате да съпоставите.

Опция 4:Сравнете с набор от знаци

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

SELECT c1 FROM t1
WHERE c1 ~ '[A-Z]';

Резултат:

       c1       
----------------
 CAFÉ
 Café
 eCafé
 James Bond 007
 JB 007

  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:Колона x е от тип oid, но изразът е от тип байт

  2. Стандартизиране на PostgreSQL сигурността в многооблачни среди

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

  4. Escape функция за регулярен израз или модели LIKE

  5. Вземете дърво родители + деца с pg-promise