我想使用DATEDIFF()在我的日期维度表中连续添加30天的数据,但结果却空了。您能否帮助我更正下面的代码以获得所需的结果?
CREATE TABLE dbo.dateDimension (
DateKey INT NOT NULL
,DateValue DATE NOT NULL
,CYear SMALLINT NOT NULL
,CMonth TINYINT NOT NULL
,CONSTRAINT PK_DimDate PRIMARY KEY ( DateKey )
);
GO
CREATE PROC dbo.dateTest
@StartDate DATETIME
AS
WHILE (DATEDIFF(day, @StartDate, GETDATE()) <=30)
BEGIN
INSERT into dbo.dateDimension
SELECT CAST( YEAR(@StartDate) * 10000 + MONTH(@StartDate) * 100 + DAY(@StartDate) AS INT)
,@StartDate
,YEAR(@StartDate)
,MONTH(@StartDate)
SET @StartDate = DATEADD(d,1,@StartDate)
END;
GO
EXECUTE dbo.dateTest '2010-01-01'
SELECT * FROM dbo.dateDimension
问题是这种逻辑:
DATEDIFF(day, @StartDate, GETDATE())
给出您当前的开始日期3739天,因此它不得少于30天。就我个人而言,我将其简单地算作如下:
declare @StartDate DATETIME = '2010-01-01', @Count int = 0
WHILE @Count <= 30 BEGIN
INSERT into @dateDimension
SELECT CAST( YEAR(@StartDate) * 10000 + MONTH(@StartDate) * 100 + DAY(@StartDate) AS INT)
, @StartDate
, YEAR(@StartDate)
, MONTH(@StartDate)
SET @StartDate = DATEADD(d,1,@StartDate);
set @Count = @Count + 1;
END;