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

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 子句中使用它时,它会起作用。你是对的,我根本不想返回“测试”。我只是在玩语法试图让某些东西起作用。 这可能是你的问题,它不属于CASEELSE 子句。 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,它会被忽略。

【讨论】:

谢谢先生!有时第二双眼睛很有帮助!

以上是关于如果字段为空,则忽略参数:无效令牌(的主要内容,如果未能解决你的问题,请参考以下文章

如果正则表达式在使用 jQuery 的handsontable 中无效,则禁用按钮

如果发现无效的表单字段,则停止 ladda spinner

Firebase 身份验证 iOS 12 无效令牌

JSON 无效令牌

当应用程序在后台时,APNS令牌会更改还是无效?

.gitignore忽略target无效