我有一张表格,其中包含慈善捐款的详细资料及其添加到数据库的日期。
我正在尝试编写一个查询,显示今天之后的下一个日期,即将记录添加到数据库的三个月周年。
鉴于过去的日期,我希望我的查询返回未来的下一个日期,该日期是原始日期即三个月周年的3个月的倍数。
请参阅下文,了解今天发布的预期产出的一些例子。
Date | Expected output
1st Feb 2015 | 1st May 2015,
1st Sep 2014 | 1st Jun 2015
答案 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