Ето четири опции за връщане на редове, които съдържат главни букви в 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