SQL查询语法咨询:筛选结束日期已超过3天的事件
筛选结束日期距今超过3天的事件的SQL语法
核心逻辑是筛选出end_date早于3天前日期的记录,也就是结束日期距今已超过3天。不同SQL数据库的语法略有差异,以下是主流数据库的实现方式:
MySQL/MariaDB
可以用DATE_SUB直接计算3天前的日期,或者用DATE_ADD对end_date做偏移,推荐前者(更利于索引利用):
WHERE end_date < DATE_SUB(CURDATE(), INTERVAL 3 DAY) ORDER BY date DESC
等价写法:
WHERE DATE_ADD(end_date, INTERVAL 3 DAY) < CURDATE() ORDER BY date DESC
PostgreSQL
使用CURRENT_DATE结合间隔运算:
WHERE end_date < CURRENT_DATE - INTERVAL '3 days' ORDER BY date DESC
等价写法:
WHERE end_date + INTERVAL '3 days' < CURRENT_DATE ORDER BY date DESC
SQL Server
用DATEADD函数实现日期偏移,注意如果end_date是纯日期类型,建议把GETDATE()转为日期类型避免时间部分干扰:
WHERE end_date < DATEADD(DAY, -3, CAST(GETDATE() AS DATE)) ORDER BY date DESC
如果不需要考虑时间部分,也可以简化为:
WHERE end_date < DATEADD(DAY, -3, GETDATE()) ORDER BY date DESC
性能提示
优先选择end_date < (当前日期减3天)的写法,因为这种写法不会对end_date字段做函数运算,数据库可以直接使用end_date上的索引,查询性能更优。
内容的提问来源于stack exchange,提问作者Nijn
相关产品推荐
相关产品推荐

