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

如何简化SQLite生成过去指定天数日历日期列表的查询语句

SQLite 简化历史日期列表查询方案

你可以使用递归公用表表达式(CTE)替代逐行UNION拼接的写法,灵活调整参数即可生成任意天数的历史日期列表,代码如下:

WITH RECURSIVE dates(d) AS (
    -- 递归起始值:过去1天的日期
    SELECT DATE('now', '-1 days')
    UNION ALL
    -- 递归逻辑:每次向前推1天
    SELECT DATE(d, '-1 days')
    FROM dates
    -- 终止条件:如需获取过去N天,修改下方的-7 days为-N days即可
    WHERE d > DATE('now', '-7 days')
)
SELECT d FROM dates ORDER BY d ASC;

方案说明

  • 写法简洁,仅需修改终止条件的天数参数,即可快速生成过去任意天数的日期列表,无需新增UNION语句
  • 使用UNION ALL替代原有UNION,递归生成的日期天然无重复,避免了不必要的去重开销,性能更优
  • 末尾的ORDER BY d ASC保证输出的日期按升序排列,和你原有UNION写法的输出顺序完全一致
  • 兼容性:递归CTE要求SQLite版本≥3.8.3(2014年发布的版本,绝大多数运行环境都已支持)

低版本兼容方案

如果你的运行环境使用的是不支持递归CTE的极老版本SQLite,且库内存在存储连续整数的辅助表(假设表名为nums,字段n存储1、2、3……的连续整数),可以用如下写法实现同样效果:

SELECT DATE('now', '-' || n || ' days') AS d
FROM nums
WHERE n <= 7
ORDER BY d ASC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:24:05