我在一个表中有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子句,因为这会使我完全创建一个单独的查询。
答案 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;