Условие LIKE
не использует шаблоны регулярных выражений.Вы ищете точную строку [abcdefghijklmnopqrstuvwxyz]
, появляющуюся в любом месте значения столбца.Ни один из ваших примеров не содержит этого, поэтому теперь возвращаются строки.
Вы также конвертируете значение столбца в нижний регистр, что побеждает то, что, как вы сказали, вы делаете, когда вы конвертируете APPLE
на apple
, что, очевидно, будет включать символы нижнего регистра.
Чтобы использовать шаблоны, вам нужно использовать эквивалент регулярного выражения, REGEXP_LIKE
;эквивалент того, что вы сделали (я думаю - если вы хотите найти любые символы нижнего регистра, а не просто строчные буквы):
select *
from testtable
where regexp_like (col1, '[abcdefghijklmnopqrstuvwxyz]');
COL1 COL2
------ -------
apple WALMART
banana TARGET
или использование более безопасного подхода скласс символов:
select *
from testtable
where regexp_like (col1, '[[:lower:]]');
или с противоположным подходом исключения верхнего регистра, что позволило бы оставить пробелы, знаки пунктуации и т. д .:
select *
from testtable
where regexp_like (col1, '[^[:upper:]]');
или исключить любое значение, содержащеелюбые символы в верхнем регистре вообще:
select *
from testtable
where not regexp_like (col1, '[[:upper:]]');
, которые все получают тот же результат с вашими образцами данных.