SQL:喜欢'%' + NULL +'%' - 这会匹配什么?

时间:2015-09-18 02:37:38

标签: sql null sql-like

我有这段代码:

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))

在某些情况下,输入'模式B'将为NULL。 SQL如何处理这个?我希望如何处理它是如果对象包含模式A而模式B为null,则where子句返回true(假设RuleType也包含在内)。如果RuleType等于,它只是跳到OR位,如果object与Pattern A完全相同,则返回True。

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

2 个答案:

答案 0 :(得分:0)

你可以像这样处理;

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))

需要进行一些优化

答案 1 :(得分:0)

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

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