如何编写SQL查询获取距今日向前45天的完整日期区间
SQL 实现近45天(含当日)日期范围筛选
核心需求说明:筛选逻辑是取日期字段落在「当日往前推算45天的时间节点」到「当日」区间内的所有记录,而非仅匹配45天前对应的单日值
通用实现逻辑
不要用等于(=)运算符匹配筛选日期,要通过范围判断(>= 起始日 AND <= 当日,或等价的BETWEEN语句)覆盖完整时段。
不同常用数据库的具体写法
- MySQL
纯日期类型字段直接匹配,无时分秒干扰:WHERE order_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 45 DAY) AND CURDATE()
如果是带时分秒的时间戳字段,对应替换函数为:WHERE create_time BETWEEN DATE_SUB(NOW(), INTERVAL 45 DAY) AND NOW() - PostgreSQL
日期偏移可直接搭配INTERVAL语法书写:WHERE order_date BETWEEN CURRENT_DATE - INTERVAL '45 days' AND CURRENT_DATE - SQL Server
需通过DATEADD函数计算偏移日期,纯日期字段建议先剥离时间部分,避免漏数:WHERE order_date BETWEEN DATEADD(DAY, -45, CAST(GETDATE() AS DATE)) AND CAST(GETDATE() AS DATE) - Oracle
日期类型直接加减整数即可代表对应天数偏移:WHERE order_date BETWEEN SYSDATE - 45 AND SYSDATE
常见误区提醒:如果错误使用
WHERE order_date = DATE_SUB(CURDATE(), INTERVAL 45 DAY)这类等值判断,只会返回45天前当天的单条/单日记录,完全丢失区间内的其他时段数据,和需求偏差极大。
内容的提问来源于stack exchange,提问作者sandraknowles
相关产品推荐
相关产品推荐

