Select Table 一年的天数 SQLITE
Select Table of Days For One Year SQLITE
我正在尝试 select 去年每个日期的 table。
在 SQL 服务器中,我可以 运行 像这样:
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
它 returns 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;
参见demo。
您也可以使用内联计数来做到这一点 table
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;
对于较新版本的 SQLite,您可能需要将 NOT MATERIALIZED
添加到 CTE。
我正在尝试 select 去年每个日期的 table。
在 SQL 服务器中,我可以 运行 像这样:
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
它 returns 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;
参见demo。
您也可以使用内联计数来做到这一点 table
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;
对于较新版本的 SQLite,您可能需要将 NOT MATERIALIZED
添加到 CTE。