Ето три опции за връщане на редове, които съдържат главни букви в SQLite.
Примерни данни
Да предположим, че имаме таблица със следните данни:
.nullvalue null
SELECT c1 FROM t1; Резултат:
c1
--------------
CAFÉ
Café
café
1café
eCafé
James Bond 007
JB 007
007
null
É
É 123
é
é 123
ø
Ø Можем да използваме следните методи, за да върнем редовете, които съдържат главни букви.
Опция 1:Сравнете с LOWER() Низ
Можем да използваме LOWER() функция за сравняване на оригиналната стойност с нейния еквивалент с малки букви:
SELECT c1 FROM t1
WHERE LOWER(c1) <> c1; Резултат:
c1 -------------- CAFÉ Café eCafé James Bond 007 JB 007
Чрез използване на не е равно на (<> ) оператор (алтернативно можете да използвате != вместо <> ако предпочитате), ние връщаме само онези редове, които са различни от техните еквиваленти с малки букви. Причината да правим това е, че ако дадена стойност е същата като нейния еквивалент с малки букви, тогава тя вече е била с малки букви (и не искаме да я връщаме).
SQLite извършва търсене с чувствителност към малки и големи букви и затова не е нужно да правим нищо друго, за да получим желания резултат.
Може да сте забелязали, че горният пример не върна главните символи на Unicode É и Ø освен ако стойността не включва и главна буква, различна от unicode. SQLite не поддържа напълно уникод символи. Например LOWER() и UPPER() функциите предоставят само съпоставяне на главни букви за 26-те букви, използвани в английския език. Следователно горният пример не преобразува никакви символи на Unicode в техния еквивалент с малки букви.
Разгледайте разширението SQLite ICU, ако трябва да работите с unicode знаци.
Вариант 2:Сравнете с действителните знаци
Друга възможност е да използвате REGEXP оператор с модел на регулярен израз, който изрично включва всеки знак с главни букви, който искаме да съпоставим:
SELECT c1 FROM t1
WHERE c1 REGEXP '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]'; Резултат:
c1 -------------- CAFÉ Café eCafé James Bond 007 JB 007
Можем да включим unicode символи в нашия списък, ако желаем:
SELECT c1 FROM t1
WHERE c1 REGEXP '[ÉØABCDEFGHIJKLMNOPQRSTUVWXYZ]'; Резултат:
c1 -------------- CAFÉ Café eCafé James Bond 007 JB 007 É É 123 Ø
Опция 3:Сравнете с набор от знаци
Друг начин да го направите е да посочите диапазона от главни букви, които искаме да съпоставим:
SELECT c1 FROM t1
WHERE c1 REGEXP '[A-Z]'; Резултат:
c1 -------------- CAFÉ Café eCafé James Bond 007 JB 007