如何根据t.Name匹配结果在SQL WHERE子句中动态添加条件
解决方案
你可以通过逻辑表达式组合实现需求,核心思路是:当t.Name包含"pink"时必须满足时间条件,不包含时时间条件自动失效。用OR和AND的组合就能搞定,不需要复杂的CASE语句。
修改后的WHERE子句如下:
WHERE CAST(t.Date AS date) = 'some date' AND t.Location = 'some location' AND ( t.Name NOT LIKE '%pink%' OR (t.Name LIKE '%pink%' AND t.Time = 'some condition') )
逻辑说明
- 外层的
AND保证原有的日期、地点条件始终生效 - 括号内的逻辑覆盖两种场景:
- 若
t.Name不包含"pink",t.Name NOT LIKE '%pink%'为真,整个括号条件直接成立 - 若
t.Name包含"pink",则必须同时满足t.Time = 'some condition',括号内才会成立
- 若
你也可以简化括号内的逻辑,写法更简洁且逻辑完全一致:
WHERE CAST(t.Date AS date) = 'some date' AND t.Location = 'some location' AND (NOT t.Name LIKE '%pink%' OR t.Time = 'some condition')
内容的提问来源于stack exchange,提问作者Sriram Arunachalam
相关产品推荐
相关产品推荐

