Игнорировать параметр, если поле пустое: Неверный токен ( - PullRequest
1 голос
/ 14 октября 2019

У меня есть параметр в предложении where моего запроса, который я пытаюсь игнорировать, если поле пустое. Получение ошибки «Недопустимый токен (».

WHERE ....  
AND    
CASE WHEN trim (cltfst) || ' ' || (cltlst) is null THEN ''
    ELSE (('LWSI:first_status')='(All)' or TRIM (status) in ('LWSI:status_list'))
    END = 'TEST'

Говорит: «Недопустимый токен (, Действительные токены (», если это имеет смысл!

1 Ответ

1 голос
/ 14 октября 2019

Если у вас есть два условия для запроса, давайте назовем их condition_a и condition_b, и если условие_a истинно, то вам все равно, что такое условие_b (вы игнорируете его). Вы можете обработать это в своем предложении WHERE с помощью ИЛИ, например:

select ...
from ...
where condition_a or condition_b

Чтобы игнорировать логическое условие, если поле (field1) пустое, это будет выглядеть как

select ...
from ...
where (field1 = '' or condition_a)
  and condition_x

В этом случае, если field1 = blank, условие истинно независимо от того, что условие_a. Условие_x все еще должно быть оценено, но условие_а фактически игнорируется, если поле1 пусто. Но если поле field1 не пустое, то для выбора записи должна быть условие condition_a. Еще раз, условие_x должно быть оценено и также должно быть истинным.


Более конкретно для вашей ситуации:

select ...
from ...
where ...
  and (trim (cltfst) || ' ' || (cltlst) is null or
        (('LWSI:first_status')='(All)' or TRIM (status) in ('LWSI:status_list')))

Не совсем уверен, что все ваши короткие комбинации означают здесь, но этоигнорируется, если trim (cltfst) || ' ' || (cltlst) is null.

...