日期匹配问题:需排除指定月日组合的SQL查询写法求助
SQL逻辑修正:排除指定月日组合的错误解决
问题分析
你的需求是:当MED_EFF_DATE的月日为06/01时,MED_CANC_DATE的月日不能是08/29。但原代码的逻辑运算符使用错误,导致错误排除了比如6/29/XXXX这类符合要求的记录。
原代码的错误点在于第二个条件用了AND,这会筛选出“月份不是8 并且 日期不是29”的记录,而实际上我们需要排除的仅仅是“月份是8 并且 日期是29”的情况,其余所有情况都应该保留。
正确写法
写法一:使用NOT包裹错误条件
WHEN (DATEPART(mm, MED_EFF_DATE) = 6 AND DATEPART(dd, MED_EFF_DATE) = 1) AND NOT (DATEPART(mm, MED_CANC_DATE) = 8 AND DATEPART(dd, MED_CANC_DATE) = 29)
写法二:利用德摩根定律替换为OR
WHEN (DATEPART(mm, MED_EFF_DATE) = 6 AND DATEPART(dd, MED_EFF_DATE) = 1) AND (DATEPART(mm, MED_CANC_DATE) <> 8 OR DATEPART(dd, MED_CANC_DATE) <> 29)
这两种写法都能准确实现需求:仅排除MED_EFF_DATE为6月1日且MED_CANC_DATE为8月29日的记录,其余符合MED_EFF_DATE为6月1日的记录都会被保留。
内容的提问来源于stack exchange,提问作者Johnny Bones
相关产品推荐
相关产品推荐

