选择"一年天数表"SQLITE



我正在尝试为去年的每个日期选择一个表。

在SQL Server中,我可以运行这样的程序:

SELECT TOP (DATEDIFF(DAY, DATEADD(YEAR, - 1, GETDATE()), GETDATE()) + 1) 
Date = CAST(DATEADD(DAY, ROW_NUMBER() OVER (ORDER BY a.object_id) - 1, DATEADD(YEAR, - 1, GETDATE())) AS DATE) 
FROM sys.all_objects a

它返回1列,其中366行包含从1年前到现在的日期。

我正在SQLITE中寻找类似的东西。

您可以使用递归CTE:

WITH cte AS (
SELECT DATE(CURRENT_DATE, '-1 year') date
UNION ALL
SELECT DATE(date, '+1 day') 
FROM cte
WHERE date < CURRENT_DATE
)
SELECT * FROM cte;

请参阅演示

您也可以使用内联计数表来完成此操作

WITH L1(n) AS (
VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)
),
L2(n) AS (
SELECT 1 FROM L1 a CROSS JOIN L1 b
)
SELECT DATE(CURRENT_DATE, (-ROW_NUMBER() OVER (ORDER BY 1) + 1) || ' days') AS date
FROM L2
LIMIT julianday(CURRENT_DATE) - julianday(DATE(CURRENT_DATE, '-1 year')) + 1;

db<gt;小提琴

对于较新版本的SQLite,您可能希望将NOT MATERIALIZED添加到CTE中。

最新更新