如果字段为空,则忽略参数:无效令牌(
Posted
技术标签:
【中文标题】如果字段为空,则忽略参数:无效令牌(【英文标题】:Ignore paramter if field is null: Invalid token ( 【发布时间】:2019-10-14 16:18:06 【问题描述】:我在查询的 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'
说:“无效的令牌(,有效的令牌(”,如果这有意义的话!
【问题讨论】:
你想用ELSE (('LWSI:first_status')='(All)' or TRIM (status) in ('LWSI:status_list'))
做什么?你想在那里返回什么价值?看起来CASE
不可能返回“TEST”。
“else”行是我的参数。我只是在那里插入用户选择的参数。当我在“常规” where 子句中使用它时,它会起作用。你是对的,我根本不想返回“测试”。我只是在玩语法试图让某些东西起作用。
这可能是你的问题,它不属于CASE
的ELSE
子句。 CASE 的 ELSE 子句必须返回一个值。它不能是逻辑表达式。
那么如何实现呢?
只需在 select 的 WHERE 子句中使用 OR。给我们更多的信息,我可以给你更好的答案。
【参考方案1】:
如果您有两个查询条件,我们称它们为 condition_a 和 condition_b,如果 condition_a 为真,那么您不必关心 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 是什么,条件都为真。 condition_x 仍然需要被评估,但如果 field1 为空白,则 condition_a 会被有效地忽略。但是,如果 field1 不为空,则 condition_a 必须为真才能选择记录。再一次,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
,它会被忽略。
【讨论】:
谢谢先生!有时第二双眼睛很有帮助!以上是关于如果字段为空,则忽略参数:无效令牌(的主要内容,如果未能解决你的问题,请参考以下文章