如何编写每日执行的SQL查询,精准获取next_due_date提前15天的记录
嘿,这个需求很明确,我帮你整理了不同数据库下的精准解决方案,确保你每天执行时都能拿到恰好提前15天到期的记录,完全不会包含区间内的其他数据~
核心思路
我们要做的就是精确匹配:next_due_date等于「当前日期 + 15天」。这里要注意如果next_due_date是带时间的类型(比如datetime),需要先截断时间部分,避免因为时分秒的差异导致匹配失败。
各数据库SQL实现
MySQL
SELECT * FROM your_table_name WHERE DATE(next_due_date) = DATE_ADD(CURRENT_DATE(), INTERVAL 15 DAY);
CURRENT_DATE()获取当前纯日期(不带时间),DATE_ADD给它加15天DATE(next_due_date)用来截断next_due_date的时间部分,确保精确匹配
PostgreSQL
SELECT * FROM your_table_name WHERE DATE_TRUNC('day', next_due_date) = CURRENT_DATE + INTERVAL '15 days';
或者更简洁的写法:
SELECT * FROM your_table_name WHERE next_due_date::DATE = CURRENT_DATE + INTERVAL '15 days';
SQL Server
SELECT * FROM your_table_name WHERE CAST(next_due_date AS DATE) = DATEADD(day, 15, CAST(GETDATE() AS DATE));
- 把
GETDATE()也转成DATE类型,避免当前时间干扰加15天后的日期计算
Oracle
SELECT * FROM your_table_name WHERE TRUNC(next_due_date) = TRUNC(SYSDATE) + 15;
TRUNC()函数用来截断日期的时间部分,SYSDATE是Oracle的当前日期时间函数
注意事项
- 记得把
your_table_name替换成你实际的表名 - 如果
next_due_date本身就是纯日期类型(不带时间),可以去掉DATE()/DATE_TRUNC()/CAST()/TRUNC()这些转换函数,直接比较即可 - 可以通过定时任务(比如MySQL事件、SQL Server代理作业、Linux cron等)设置每日自动执行这个查询,不用手动跑
- 测试时可以把当前日期换成固定值,比如MySQL里用
'2024-05-20'代替CURRENT_DATE(),验证结果是否符合预期
内容的提问来源于stack exchange,提问作者Nadeem
相关产品推荐
相关产品推荐

