Пустой параметр для LIKE в Oracle sql должен быть ложным - PullRequest
0 голосов
/ 18 декабря 2018

Я выполняю запрос в Oracle, где мне нужно выбрать данные по трем параметрам.ID, MNO, NAME здесь мой запрос выглядит как

SELECT *
  FROM USER_TABLE
 WHERE L_ID <> 1111
       AND (   ID = ''
            OR MNO = '0215421101'
            OR FIRST_NAME || ' ' || LAST_NAME LIKE '%' || '' || '%') //when Empty, search only return values for MNO

Это возвращает все результаты, потому что пустое пространство совпадает во всех записях.Как мне ограничить это только MNO или ID, если FIRST_NAME + LAST_NAME - это пустая строка

Update ::

, когда данные возвращаются из параметра имени.

SELECT *
  FROM USER_TABLE
 WHERE L_ID <> 1111
       AND (   ID = ''
            OR MNO = ''
            OR FIRST_NAME || ' ' || LAST_NAME LIKE '%' || 'User Name' || '%') //when have value, search only return values for NAme

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Используйте функцию nvl или Decode для удаления пробела перед строкой и после строки, используйте обрезку в соответствии с сохраненным значением базы данных.

0 голосов
/ 18 декабря 2018

Добавьте nvl для каждого параметра, и он проверит текущее значение (всегда верно)

 Or FIRST_NAME = nvl(?,FIRST_NAME) and LAST_NAME = nvl(?,LAST_NAME)

NVL позволяет заменить ноль (возвращается пустым)со строкой в ​​результатах запроса.Если expr1 равен нулю, то NVL возвращает expr2.Если expr1 не ноль, то NVL возвращает expr1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...