我使用Oracle Apex 5编写了一个搜索工具,该工具具有2个特定的过滤器/搜索字段。我正在尝试搜索一个或两个,但是没有得到想要的结果。假设我的表中有“姓名姓氏”列,并使用“姓名姓氏”搜索字段。因此,数据将如下所示:
Name | Surname
--------------------
Phil | Anselmo
Max | Cavalera
Maynard | Keenan
Kurt | Cobain
David | Gilmour
我在Apex中的搜索字段将是:
:P1_NAME
:P1_SURNAME
我要符合以下任一条件:
regexp_like(NAME, :P1_NAME, 'i') and regexp_like(SURNAME, :P1_SURNAME, 'i')
or
:P1_NAME is null and regexp_like(SURNAME, :P1_SURNAME, 'i')
or
:P1_SURNAME is null and regexp_like(NAME, :P1_NAME, 'i')
但是我不确定如何将其合并到单个选择中?这是我的最新选择。我尝试了很多其他的东西。
select name, surname, from leads
where :P1_SURNAME is null and regexp_like(NAME, :P1_NAME, 'i')
or :P1_NAME is null and regexp_like(SURNAME, :P1_SURNAME, 'i')
or regexp_like(NAME, :P1_NAME, 'i') and regexp_like(SURNAME, :P1_SURNAME, 'i')
答案 0 :(得分:2)
如果为分组条件添加括号,您的选择似乎很好:
select name, surname, from leads
where (:P1_SURNAME is null and regexp_like(NAME, :P1_NAME, 'i'))
or (:P1_NAME is null and regexp_like(SURNAME, :P1_SURNAME, 'i'))
or (regexp_like(NAME, :P1_NAME, 'i') and regexp_like(SURNAME, :P1_SURNAME, 'i'))
答案 1 :(得分:2)
您只需要在每个条件内加上括号,即:
select name, surname
from leads
where (:P1_SURNAME is null and regexp_like(NAME, :P1_NAME, 'i'))
or (:P1_NAME is null and regexp_like(SURNAME, :P1_SURNAME, 'i'))
or (regexp_like(NAME, :P1_NAME, 'i') and regexp_like(SURNAME, :P1_SURNAME, 'i'))
这意味着这些条件中至少有一组必须为真,并且在每个条件内,两个子条件都必须为真才能使该条件成立。
答案 2 :(得分:0)
尝试此查询:
select name, surname from leads
where
instr( upper(:P1_SURNAME), upper(SURNAME) ) + instr( upper(:P1_NAME), upper(NAME) ) > 0