【发布时间】: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。给我们更多的信息,我可以给你更好的答案。
标签: sql db2 case where-clause ibm-midrange