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