如何编写WHERE子句筛选y日期在x日期前后7天内的数据
筛选日期处于指定范围的WHERE子句写法
你的问题出在之前的条件只覆盖了x日期之后7天的范围,没包含x之前的7天,所以无法筛选出符合要求的数据。正确的逻辑是同时限定y不早于x往前推7天,且不晚于x往后推7天,以下是具体写法:
针对MySQL的写法
- 如果需要保留时分秒等时间部分:
WHERE y >= DATE_SUB(x, INTERVAL 7 DAY) AND y <= DATE_ADD(x, INTERVAL 7 DAY)
- 如果只需要比较日期部分(忽略时分秒):
WHERE DATE(y) >= DATE_SUB(DATE(x), INTERVAL 7 DAY) AND DATE(y) <= DATE_ADD(DATE(x), INTERVAL 7 DAY)
其他数据库适配说明
不同数据库的日期加减语法略有区别,核心逻辑不变:
- PostgreSQL:用
x - INTERVAL '7 days'和x + INTERVAL '7 days'替代DATE_SUB和DATE_ADD - SQL Server:用
DATEADD(day, -7, x)和DATEADD(day, 7, x)
内容的提问来源于stack exchange,提问作者Karam Abu Shammala
相关产品推荐
相关产品推荐

