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)
然而,这不是一个特别好的方法 - 但我怀疑它会起作用,尽管已经评论过性能问题。
我有这个代码:
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)
然而,这不是一个特别好的方法 - 但我怀疑它会起作用,尽管已经评论过性能问题。