Oracle LIKE模式匹配

时间:2019-08-26 10:03:20

标签: sql oracle oracle11g sql-like

我在一个表中有10条记录。在这些记录中,我需要使用单个Oracle查询执行以下3个操作(说单个查询的原因是这是自动化框架的一部分,我需要保留单个通用查询)

操作1:获取全部10条记录

Select * from table_name where col01 like ('%')
<<10 records fetched>>

操作2:获取以字符串“ Tivoli”开头的记录

Select * from table_name where col01 like ('Tivoli%')
<<1 record fetched>>

操作3:获取不以“ Tivoli”开头的记录
            <<应给出9条记录>>

我无法为操作3编写查询,但是我不想使用单独的NOT LIKE子句,因为这会使我完全创建一个单独的查询。

4 个答案:

答案 0 :(得分:1)

然后,您可以使用minus设置运算符:

Select * from table_name -- all records
minus
Select * from table_name where col01 like 'Tivoli%' 
-- records for col01 column starts with Tivoli 

如果所有类型的Tivoli(例如TIVOLI ..或tIvOli或..)都应区分大小写,则可以将条件视为

where lower(col01) like 'tivoli%'

答案 1 :(得分:0)

您可以使用:

select *
from table_name
where col01 not like 'Tivoli%'

如果col01可以是NULL,那么您需要考虑到这一点:

select *
from table_name
where col01 not like 'Tivoli%' or col01 is null;

答案 2 :(得分:0)

Select * from table_name where not (col01 like ('Tivoli%') )

答案 3 :(得分:0)

您要查询一个涵盖所有三个选项的通用查询。为此,请使用两个变量,并在不想使用它们时将它们设置为null:

Select *
from table_name
where (col01 like :must_match or :must_match is null)
and (col01 not like :must_not_match or col01 is null or :must_not_match is null);

或者,如果要让框架处理匹配项或不匹配项,请选择所有带有标志的行:

Select
  t.*,
  case when col01 like :pattern then 'match' else 'no match' end as is_match
from table_name t;