存储过程在日期维表的while循环条件下使用DATEDIFF添加30天

问题描述 投票:0回答:1

我想使用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
sql-server stored-procedures while-loop datediff
1个回答
0
投票

问题是这种逻辑:

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;
© www.soinside.com 2019 - 2024. All rights reserved.