Oracle LIKE 模式匹配
Oracle LIKE pattern match
我在 table 中有 10 条记录。在这些记录中,我需要使用单个 Oracle 查询执行以下 3 个操作(说单个查询的原因是这是自动化框架的一部分,我需要保留单个通用查询)
操作一:获取全部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 子句,因为这会使我完全创建一个单独的查询。
然后,您可以使用 minus
set operator :
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%'
您可以使用:
select *
from table_name
where col01 not like 'Tivoli%'
如果 col01
可以是 NULL
,那么您需要考虑到这一点:
select *
from table_name
where col01 not like 'Tivoli%' or col01 is null;
Select * from table_name where not (col01 like ('Tivoli%') )
您要求的是涵盖所有三个选项的通用查询。为此使用两个变量并在您不想使用它们时将它们设置为空:
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 所有带有标志的行:
Select
t.*,
case when col01 like :pattern then 'match' else 'no match' end as is_match
from table_name t;
我在 table 中有 10 条记录。在这些记录中,我需要使用单个 Oracle 查询执行以下 3 个操作(说单个查询的原因是这是自动化框架的一部分,我需要保留单个通用查询)
操作一:获取全部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 子句,因为这会使我完全创建一个单独的查询。
然后,您可以使用 minus
set operator :
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%'
您可以使用:
select *
from table_name
where col01 not like 'Tivoli%'
如果 col01
可以是 NULL
,那么您需要考虑到这一点:
select *
from table_name
where col01 not like 'Tivoli%' or col01 is null;
Select * from table_name where not (col01 like ('Tivoli%') )
您要求的是涵盖所有三个选项的通用查询。为此使用两个变量并在您不想使用它们时将它们设置为空:
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 所有带有标志的行:
Select
t.*,
case when col01 like :pattern then 'match' else 'no match' end as is_match
from table_name t;