SQL查询筛选距选定日期不足7天的EndDate记录问题咨询
问题原因
你现有代码的核心错误是BETWEEN语法的参数顺序错误:BETWEEN 下限 AND 上限要求下限值必须小于等于上限值,你代码中DATEADD(day, - 7, EndDate)得到的是比EndDate早7天的日期,数值更小,你把更大的EndDate放在了BETWEEN的前位,更小的减7后日期放在后位,生成的是无效区间,自然无法返回匹配结果。
可行实现方案
方案1:修正BETWEEN写法
适用场景:2021-12-06落在EndDate往前推7天到EndDate的区间内
SELECT EndDate FROM MYtable WHERE '2021-12-06' BETWEEN DATEADD(day, -7, EndDate) AND EndDate
方案2:使用DATEDIFF写法(更灵活,可读性更高)
如果需求是两个日期的间隔天数小于7天,不管EndDate在2021-12-06之前还是之后:
SELECT EndDate FROM MYtable WHERE ABS(DATEDIFF(day, EndDate, '2021-12-06')) < 7
如果需要排除间隔刚好7天的情况,将<7改为<=6即可,逻辑更直观。
注:不同数据库的日期函数参数可能略有差异,比如MySQL中实现日期加减需要用
DATE_ADD(EndDate, INTERVAL -7 DAY)写法,可根据你使用的数据库类型微调函数语法。
内容的提问来源于stack exchange,提问作者Dave Hughes
相关产品推荐
相关产品推荐

