You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL查询获取当前日期后X天的日期列表?

生成当前日期后X个日期的SQL实现

嘿,这个需求其实挺常见的,不同数据库的实现思路大同小异,核心就是生成1到X的连续数字序列,再把每个数字加到当前日期上。我给你分几种常用数据库来具体说明:

Oracle(匹配你例子里的sysdate)

Oracle里可以用CONNECT BY来快速生成序列,非常方便。比如当X=2时,执行下面的语句就能得到你要的结果:

SELECT TRUNC(SYSDATE) + LEVEL AS next_dates
FROM dual
CONNECT BY LEVEL <= 2;
  • TRUNC(SYSDATE)是把当前日期的时分秒截断,只保留日期部分;如果需要保留当前时间,去掉TRUNC就行。
  • LEVEL是Oracle递归查询里的伪列,从1开始递增,直到满足LEVEL <= 2的条件,这样就会生成1天、2天后的日期。

如果X是动态变量(比如来自应用输入),可以用绑定变量代替固定值:

SELECT TRUNC(SYSDATE) + LEVEL AS next_dates
FROM dual
CONNECT BY LEVEL <= :X;

MySQL

MySQL没有dual表,也不支持CONNECT BY,但可以用递归CTE(公共表表达式)来实现:

WITH RECURSIVE date_series AS (
    -- 初始行:当前日期+1天
    SELECT CURDATE() + INTERVAL 1 DAY AS next_date
    UNION ALL
    -- 递归生成后续日期
    SELECT next_date + INTERVAL 1 DAY
    FROM date_series
    -- 终止条件:生成到X天后的日期前一天
    WHERE next_date < CURDATE() + INTERVAL 2 DAY
)
SELECT next_date FROM date_series;

SQL Server

SQL Server同样用递归CTE,配合DATEADD函数来处理日期:

WITH date_series AS (
    -- 初始行:当前日期+1天
    SELECT DATEADD(DAY, 1, GETDATE()) AS next_date
    UNION ALL
    -- 递归生成后续日期
    SELECT DATEADD(DAY, 1, next_date)
    FROM date_series
    -- 终止条件:生成到X天后的日期前一天
    WHERE next_date < DATEADD(DAY, 2, GETDATE())
)
-- 转换为日期格式,去掉时分秒
SELECT CONVERT(DATE, next_date) AS next_dates FROM date_series;

总的来说,不管哪种数据库,核心都是先生成1到X的连续数字,再和当前日期做加法。你可以根据自己使用的数据库选择对应的写法~

内容的提问来源于stack exchange,提问作者S_S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:19:56