作者:季幸静仪1255_189 | 来源:互联网 | 2022-12-04 12:29
最近我遇到了一个查询问题,该问题没有返回它预期返回的所有内容.按条件选择的部分查询如下:
AND field LIKE
CASE WHEN @val = 1 THEN
'%'
ELSE
'N'
END
现在,当@val为1时,我希望这段代码基本上什么也不做,就像基本上接受任何值的条件一样,包括空值.
我错了吗?如果是这样,有没有人有解决方案?我正在思考一些事情
AND field LIKE
CASE WHEN @val = 1 THEN
'%' OR ISNULL(field)
ELSE
'N'
END
但是SQL并不像那样工作,但这基本上就是我想要实现的目标.
谢谢大家,如果这是重复,我很抱歉,我找不到答案.
1> Jason W..:
根据您要完成的任务,您的查询似乎可以针对此进行优化:
AND (@val = 1 OR field = 'N')
似乎没有理由LIKE
.
UPDATE
由于您试图了解行为,LIKE
而CASE
不是使用现有查询,因此以下是已接受答案的一些变体.
要CASE
在其中使用LIKE
,您必须使用类似COALESCE
处理null case的方法.
COALESCE(Field, '') LIKE (CASE WHEN @val = 1 THEN '%' ELSE 'N' END)
否则,您可以使用LIKE
内部CASE
(如接受的答案),但可能个人偏好,这似乎更容易阅读:
1 = (CASE WHEN @val = 1 OR Field LIKE 'N' THEN 1 ELSE 0 END)
也许.共享的意图代码似乎是作者认为应该包括NULL.否则,原始代码将起作用,因为它已经排除了NULL.