SQL: Like '%' + NULL + '%' - 什么会匹配这个?

SQL: Like '%' + NULL + '%' - what will match to this?

我有这个代码:

where (object like
(case when df.RuleType = 'Contains' then '%' + df.[Pattern A] + '%' end)
And object like
(case when df.RuleType = 'Contains' then '%' + df.[Pattern B] + '%' end)
OR object in (case when df.RuleType = 'Equals' then df.[Pattern A] end))

在某些情况下,输入 'Pattern B' 将为 NULL。 SQL 将如何处理?我希望它的处理方式是,如果对象包含模式 A 且模式 B 为空,则 where 子句 returns 为真(假设 RuleType 也包含)。如果 RuleType 等于,它只是跳到 OR 位,如果对象与模式 A 完全相同,它 returns True.

但是,如果 SQL 以这种方式处理它,我没有得到我期望的所有输出(一些应该 return TRUE 的条目不是)。

你可以这样处理;

where ((df.[Pattern A] is NULL OR object like
(case when df.RuleType = 'Contains' then '%' + df.[Pattern A] + '%' end))
And (df.[Pattern B] is NULL OR object like
(case when df.RuleType = 'Contains' then '%' + df.[Pattern B] + '%' end))
OR df.[Pattern A] is NULL OR object in (case when df.RuleType = 'Equals' then df.[Pattern A] end))

需要一些优化

(case when df.RuleType = 'Contains' then '%' + ISNULL(df.[Pattern A], object) + '%' end)

然而,这不是一个特别好的方法 - 但我怀疑它会起作用,尽管已经评论过性能问题。