两个日期之间的日期计算

时间:2011-05-18 22:41:27

标签: sql sql-server-2005 math date

我需要一些帮助进行日期计算。

我的某些内容会在X

之后每隔Create Date天过期

因此,如果Create Date4/22且过期日期设为10则会过期

5/2, 5/12, 5/22, 6/1等......

我需要能够告诉人们他们的物品什么时候会在5天内到期

因此,对于5/2,如果当前日期在4/27和5/2之间,我需要将此项添加到计数中。

这是在SQL中。

我们拥有的只有RunDateCreateDateExpirationDays

我已经完成了数学计算,大致得到了截止日期,但是如果它得到余数则没有用,我不想通过发布我认为应该是的答案来歪曲任何人的答案。我已经尝试了很多方法,我有点绝望了。

非常感谢任何帮助

修改

我为此做了数学计算,看起来像这样

CreateDate + (((RunDate - CreateDate)/ExpireDays)*ExpireDays)) Between Rundate-1 and Rundate +5

但是这给了我SQL中的算术溢出,所以我不知道该怎么做......

2 个答案:

答案 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)