【问题标题】:Select Table of Days For One Year SQLITE选择一年的天数表 SQLITE
【发布时间】:2021-12-29 17:05:48
【问题描述】:

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

在 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 中的等价物。

【问题讨论】:

    标签: sql sql-server sqlite date recursive-query


    【解决方案1】:

    您可以使用递归 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

    【讨论】:

      【解决方案2】:

      您也可以使用内联计数表来执行此操作

      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<>fiddle

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-27
        • 1970-01-01
        • 1970-01-01
        • 2020-07-11
        • 2013-01-23
        • 2016-01-01
        • 2011-06-21
        • 1970-01-01
        相关资源
        最近更新 更多