生成下一个三个月的周年纪念日

时间:2015-03-30 11:44:23

标签: sql sql-server sql-server-2008

我有一张表格,其中包含慈善捐款的详​​细资料及其添加到数据库的日期。

我正在尝试编写一个查询,显示今天之后的下一个日期,即将记录添加到数据库的三个月周年。

鉴于过去的日期,我希望我的查询返回未来的下一个日期,该日期是原始日期即三个月周年的3个月的倍数。

请参阅下文,了解今天发布的预期产出的一些例子。

Date         | Expected output
1st Feb 2015 | 1st May 2015, 
1st Sep 2014 | 1st Jun 2015

2 个答案:

答案 0 :(得分:1)

您可以使用DATEADD功能执行此任务。我只使用@today变量作为例子。

DECLARE @threemonth datetime, @today datetime
SET @today = GETUTCDATE()
SELECT @threemonth = DATEADD(month, 3, @today)

答案 1 :(得分:1)

创建一个返回循环日期的函数,然后从表值中调用它。可能有更好的/更快的方式,但这可以得到你所需要的。

CREATE FUNCTION [dbo].[fn_Get3MonthAnniv] (@DateVal DATETIME)
RETURNS DATETIME
AS
BEGIN
    DECLARE @LoopDate DATETIME = @DateVal
    DECLARE @Today as datetime = CONVERT(Date,GETDATE())

    While @loopDate<@today
    BEGIN
        SET @loopDate=DATEADD(Month,3,@loopDate)
    END


    RETURN @loopDate

END
GO

 CREATE TABLE #dates (DateVal DATETIME)

INSERT #dates (DateVal)
VALUES ('1/1/2014')
    ,('1/1/2015')

SELECT DateVal
    ,[dbo].[fn_Get3MonthAnniv](DateVal)
FROM #dates

DROP TABLE #dates