【发布时间】:2019-08-26 10:03:20
【问题描述】:
我在一个表中有 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”开头的记录
>
我无法为操作 3 编写查询,但我不想使用单独的 NOT LIKE 子句,因为这会使我完全创建单独的查询。
【问题讨论】:
-
not like 'Tivoli%'有什么问题? (顺便说一句:字符串常量周围的括号完全没用) -
这意味着我必须使用 Not like 创建一个 More 查询。所以操作 1 和 2 使用 LIKE,操作 3 使用 NOT LIKE,这不是我想要的。这应该更像是一个通用查询
-
如果您正在编写某种(查询编写)框架,能够否定条件是此类框架应该支持的最基本的事情之一。
-
顺便问一下,
case sensitivity对您的特定字符串有影响吗?例如col01可以有TIVOLI..或tIvOli..之类的值吗? -
请注意,第一个查询仅适用于 col01 不为空的行。它不会检索 col01 为空的任何行。您可以使用可选参数来正确处理此问题(例如
where col01 like :pattern or :pattern is null)。请参阅我对此的回答。
标签: sql oracle oracle11g sql-like