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

问题描述 投票:1回答:1

我在查询的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'

说:“无效令牌(,有效令牌(“,如果有任何意义!

sql db2 case where-clause ibm-midrange
1个回答
0
投票

[如果您有两个查询条件,则将它们称为condition_a和condition_b,如果condition_a为true,则不必关心condition_b是什么(忽略它)。您可以在WHERE子句中使用OR这样处理:

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求值,并且它必须为true。


根据您的具体情况:

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,它将被忽略。

© www.soinside.com 2019 - 2024. All rights reserved.