我在 postgresql 中使用以下查询来使用 CTE 生成连续日期的列表,并遇到两个问题:
WITH datecalendar
AS (SELECT cast ('2023-08-08' as date) AS thedate
UNION ALL
SELECT Dateadd (day, 1, datecalendar.thedate) AS thedate
FROM datecalendar
WHERE Dateadd (day, 1, datecalendar.thedate) <= cast ('2023-08-12' as date))
SELECT * FROM datecalendar
OPTION (MAXRECURSION 0);
有人可以建议我如何解决上述两个问题吗?我已经做了很多寻找解决方案的工作。对于“1”,建议是确保 OPTION ... 放置在语句中的正确位置(例如,如何以及在哪里设置 MAXRECURSION 选项?),我似乎正在这样做。
对于“2”,我还没有找到类似的解决方案。
您似乎正在尝试使用递归公用表表达式 (CTE) 在 PostgreSQL 中生成一系列日期,但您正在混合 Microsoft SQL Server 的典型语法。让我们解决您的每个问题:
让我们重写您的查询以使用 PostgreSQL:
WITH RECURSIVE datecalendar AS (
SELECT cast('2023-08-08' as date) AS thedate
UNION ALL
SELECT thedate + interval '1 day'
FROM datecalendar
WHERE thedate + interval '1 day' <= cast('2023-08-12' as date)
)
SELECT * FROM datecalendar;
主要变化:
在 PostgreSQL 数据库中运行上述查询将为您提供所需的日期序列。