我需要一些帮助进行日期计算。
我的某些内容会在X
Create Date
天过期
因此,如果Create Date
为4/22
且过期日期设为10
则会过期
5/2, 5/12, 5/22, 6/1
等......
我需要能够告诉人们他们的物品什么时候会在5天内到期
因此,对于5/2,如果当前日期在4/27和5/2之间,我需要将此项添加到计数中。
这是在SQL中。
我们拥有的只有RunDate
,CreateDate
和ExpirationDays
我已经完成了数学计算,大致得到了截止日期,但是如果它得到余数则没有用,我不想通过发布我认为应该是的答案来歪曲任何人的答案。我已经尝试了很多方法,我有点绝望了。
非常感谢任何帮助
修改
我为此做了数学计算,看起来像这样
CreateDate + (((RunDate - CreateDate)/ExpireDays)*ExpireDays)) Between Rundate-1 and Rundate +5
但是这给了我SQL中的算术溢出,所以我不知道该怎么做......
答案 0 :(得分:0)
在MySql中你可以做点什么
(ExpirationDays - (DATEDIFF(NOW(), CreateDate) % ExpirationDays)) > 5;
修改强>
对于SQL Server,你会做的有点不同:
@expiringDays - (DATEDIFF(dd, ml.CreateDate, @date) % @expiringDays) > 5;
答案 1 :(得分:0)
With Expirations As
(
Select Cast('2011-04-22' As datetime) As CreateDate, 10 As ExpirationDays
Union All
Select DateAdd( d, ExpirationDays, CreateDate ), ExpirationDays
From Expirations
Where CreateDate <= DateAdd(d,10,CURRENT_TIMESTAMP) --(arbitary end date)
)
Select *
From Expirations
Where CreateDate >= CURRENT_TIMESTAMP
And CreateDate <= DateAdd(d,5,CURRENT_TIMESTAMP)
使用与更新帖子中使用的数学类似的逻辑:
With Expirations As
(
Select Cast('2011-04-22' As datetime) As CreateDate, 10 As ExpirationDays
Union All
Select DateAdd( d, ExpirationDays, CreateDate ), ExpirationDays
From Expirations
Where CreateDate <= DateAdd(d,10,CURRENT_TIMESTAMP) --(arbitary end date)
)
Select *
From Expirations
Where CreateDate >= DateAdd(d, -1, CURRENT_TIMESTAMP)
And CreateDate <= DateAdd(d, 5, CURRENT_TIMESTAMP)