我正在尝试在SQL的一列中查找所有小写字母的实例,问题是我找不到能够执行所需功能的查询。
TestTable
Col1 Col2
apple WALMART
APPLE TARGET
banana TARGET
在上面的示例中,我想在第1行和第3行中插入字符串“ apple”和“ banana”,我试图搜索所有小写的实例,而不是文字字符串。
select * from testtable where lower(col1) LIKE '%[abcdefghijklmnopqrstuvwxyz]%' ;
上面的查询返回0个结果。有提示吗?
答案 0 :(得分:4)
LIKE
条件不使用正则表达式模式。您正在寻找出现在列值中任何位置的确切字符串[abcdefghijklmnopqrstuvwxyz]
。您的示例都没有包含该示例,因此现在返回行。
您还将列值转换为小写,这与您说的一样,因为将APPLE
转换为apple
时显然会包括小写字符。
要使用模式,您需要使用等效的正则表达式REGEXP_LIKE
;等同于您所做的事情(我想-假设您想找到任何小写字符,而不是 just 小写字母):
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:]]');
所有这些都与您的样本数据得到相同的结果。