首页 > 解决方案 > 在范围内添加日期

问题描述

我需要添加从 01-01-2011 到 31-12-2014 的日期,格式为:dd-mm-yyyy,我该怎么做?我的意思是这样的:

SET @Date = '01/01/2011';
WHILE @Date <'31/12/2014'
BEGIN
    INSERT INTO Calendar(DataKal) VALUES (@Date);
    SET @Date = @Date + 1;
END

我正在使用 SQL Server 2014。

标签: sqlsql-serverdaterange

解决方案


如果您要说的是您想要INSERT在 2 个日期之间为每个日期设置一行,那么最好的也是迄今为止最快的方法是使用 Tally:

DECLARE @StartDate date = '20110101',
        @EndDate date = '20141230'; --Seems odd you want to omit 31 December 2014

WITH N AS(
    SELECT N
    FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))N(N)),
Tally AS(
    SELECT TOP (DATEDIFF(DAY, @StartDate, @EndDate) + 1)
           ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) - 1 AS I
    FROM N N1, N N2, N N3, N N4) --10,000 rows
INSERT INTO dbo.Calendar (DataKal) 
SELECT DATEADD(DAY, T.I, @StartDate)
FROM Tally T;

推荐阅读