sql - 在范围内添加日期
问题描述
我需要添加从 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。
解决方案
如果您要说的是您想要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;