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