如果字段为null,则忽略参数:无效的令牌(

时间:2019-10-14 16:18:06

标签: sql db2 case where-clause ibm-midrange

我在查询的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 个答案:

答案 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会被忽略。