You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

日期匹配问题:需排除指定月日组合的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 14:19:53