我在查询的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'
说:“无效令牌(,有效令牌(”,如果有任何意义!
答案 0 :(得分:1)
如果查询有两个条件,可以将它们称为condition_a和condition_b,如果condition_a为true,则不必关心condition_b是什么(忽略它)。您可以使用以下OR在WHERE子句中处理该问题:
select ...
from ...
where condition_a or condition_b
如果字段(field1)为空,则忽略逻辑条件,这看起来像
select ...
from ...
where (field1 = '' or condition_a)
and condition_x
在这种情况下,如果field1 =空,则无论condition_a是什么,条件都为true。 condition_x仍然必须进行评估,但是如果field1为空,则condition_a将被有效忽略。但是,如果field1不为空,则condition_a必须为true才能选择记录。再一次,必须对condition_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
会被忽略。