搜索Oracle中所有小写字母的实例

时间:2019-02-14 17:23:48

标签: sql regex oracle

我正在尝试在SQL的一列中查找所有小写字母的实例,问题是我找不到能够执行所需功能的查询。

TestTable
  Col1   Col2
  apple  WALMART
  APPLE  TARGET
  banana TARGET

在上面的示例中,我想在第1行和第3行中插入字符串“ apple”和“ banana”,我试图搜索所有小写的实例,而不是文字字符串。

select * from testtable where lower(col1) LIKE '%[abcdefghijklmnopqrstuvwxyz]%' ;

上面的查询返回0个结果。有提示吗?

1 个答案:

答案 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:]]');

所有这些都与您的样本数据得到相同的结果。