【问题标题】:How to select all dates from 2002 to 2013 in Microsoft Sql Server 2012如何在 Microsoft Sql Server 2012 中选择 2002 年到 2013 年的所有日期
【发布时间】:2013-12-03 12:06:54
【问题描述】:

我找到了这个解决方案,但是限制在 2047 天。

DECLARE @MinDate DATE, @MaxDate DATE;
SELECT DATEADD(DAY,number,@MinDate) [Date]
    FROM master.dbo.spt_values
    WHERE type = 'P'
    AND number > 0
    AND DATEADD(DAY,number,@MinDate) <= @MaxDate

如何延长最大天数?

【问题讨论】:

    标签: sql sql-server sql-server-2012 sql-server-2012-express


    【解决方案1】:

    请尝试使用 CTE:

    DECLARE @MinDate DATE, @MaxDate DATE;
    SELECT @MinDate =DATEADD(year,-11 ,GETDATE()), @MaxDate =getdate();
    
    ;WITH Dates AS
    (
        SELECT n = @MinDate
        UNION ALL
        SELECT DATEADD(day, 1, n)
        FROM Dates
        WHERE DATEADD(day, 1, n)  <= @MaxDate
    )
    SELECT n
    FROM Dates 
    OPTION (MAXRECURSION 0);
    

    【讨论】:

    • 太棒了。并且没有 master.dbo.spt_values 魔法!!!但是什么是 OPTION (MAXRECURSION 0); ?
    • @YegorRazumovsky - 指定此查询允许的最大递归数。 number 是介于 0 和 32767 之间的非负整数。指定 0 时,不应用限制。如果未指定此选项,则服务器的默认限制为 100 (Source)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    相关资源
    最近更新 更多