plsql несколько случаев, сопоставление регулярных выражений - PullRequest
0 голосов
/ 26 июня 2018

Я написал инструмент поиска, используя 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')

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Попробуйте этот запрос:

select name, surname from leads
where 
instr( upper(:P1_SURNAME), upper(SURNAME) ) + instr( upper(:P1_NAME), upper(NAME) ) > 0 
0 голосов
/ 26 июня 2018

Вам просто нужно заключить скобки вокруг условий внутри каждого или, т. Е .:

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 голосов
/ 26 июня 2018

Ваш выбор кажется правильным, если вы добавляете фигурные скобки для условий группировки:

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'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...