Ето четири опции за връщане на редове, които съдържат малки букви в Oracle Database.
Примерни данни
Да предположим, че имаме таблица със следните данни:
SELECT c1 FROM t1;
Резултат:
CAFÉ Café café 1café eCafé James Bond 007 JB 007 007 É É 123 é é 123 ø Ø
Можем да използваме следните методи, за да върнем редовете, които съдържат главни букви.
Опция 1:Сравнете с POSIX клас символи
REGEXP_LIKE
на Oracle условието отговаря на стандарта за регулярни изрази POSIX и насоките за регулярни изрази на Unicode. Следователно можем да използваме [:lower:]
POSIX клас символи за проверка за малки букви:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[[:lower:]]');
Резултат:
Café café 1café eCafé James Bond 007 é é 123 ø
Опция 2:Сравнете с UPPER()
Низ
Можем да използваме UPPER()
функция за сравняване на оригиналната стойност с нейния еквивалент с главни букви:
SELECT c1 FROM t1
WHERE UPPER(c1) <> c1;
Резултат:
Café café 1café eCafé James Bond 007 é é 123 ø
Чрез използване на не е равно на (<>
) оператор (алтернативно можете да използвате !=
вместо <>
ако предпочитате), ние връщаме само онези редове, които са различни от техните еквиваленти с главни букви. Причината да правим това е, че ако стойността е същата като нейния еквивалент с главни букви, тогава тя вече е била с главни букви (и не искаме да я връщаме).
По подразбиране Oracle извършва търсене според главните и малки букви и затова не е необходимо да правя нищо друго със заявката, за да я направя чувствителна към малки и малки букви.
Вариант 3:Сравнете с действителните знаци
Друга възможност е да използвате REGEXP_LIKE
условие с модел на регулярен израз, който изрично включва всеки символ с малка буква, който искаме да съпоставим:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[abcdefghijklmnopqrstuvwxyz]', 'c');
Резултат:
Café café 1café eCafé James Bond 007
'c'
указва съвпадение, чувствително към малки и големи букви и ударение, дори ако определеното съпоставяне на условието не е чувствително към главни или ударение.
Този път се връщат по-малко редове, отколкото в предишните примери. Това е, защото не съм посочил знаци като é
и ø
, които бяха върнати в тези примери. Нашият резултат съдържа é
но този ред беше върнат само защото съдържа и други малки букви, които правят съвпадение.
Следователно, ако използвате тази опция, ще трябва да се уверите, че имате всички валидни знаци.
Ето го отново с включени тези два знака:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[éøabcdefghijklmnopqrstuvwxyz]', 'c');
Резултат:
Café café 1café eCafé James Bond 007 é é 123 ø
Опция 4:Сравнете с набор от знаци
Друг начин да го направите е да посочите диапазона от главни букви, които искаме да съпоставим:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[a-z]', 'c');
Резултат:
Café café 1café eCafé James Bond 007