2011-05-18 221 views
0

我需要一些帮助来计算日期。日期间的计算在两个日期之间

我有一些过期每X天数从Create Date

远所以,如果Create Date4/22和到期日设定为10将到期

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

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

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

这是SQL。

所有我们是RunDate,该CreateDateExpirationDays

我做数学计算来大致获得的截止日期,但如果它得到的余数是没有帮助的,我不希望通过张贴我认为应该的内容来歪曲任何人的答案。我尝试了很多方法,并且有点绝望。

任何帮助,将不胜感激

编辑:

我做数学,这和它看起来像这样

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

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

+1

标签'日期','计算'和'过期'分别有'20','5'和'0'追随者。当日期函数不同时,将RDBMS标记为更有用。 – 2011-05-18 22:45:34

回答

0

在MySql中你可以做一些

(ExpirationDays - (DATEDIFF(NOW(), CreateDate) % ExpirationDays)) > 5; 

编辑

对于SQL Server,你会做一点点不同:

@expiringDays - (DATEDIFF(dd, ml.CreateDate, @date) % @expiringDays) > 5; 
+0

所以我用mod完成了这个工作,它一直在咬我,但我从来没有用<,总是'BETWEEN'尝试它 – EJC 2011-05-18 22:50:18

+0

它是如何给你带来问题的? – 2011-05-18 22:52:21

+0

所以,这是给我麻烦的场景: 'DATEDIFF(dd,ml。CreateDate,@date)%@ expiringDays' 其中'CreateDate = 4/7,@date = 5/10,ExpireDays = 30' DateDiff = 33%30 = 3它介于0和5之间,但它不应该所以我试过'ExpireDays - (DATEDIFF(dd,ml.CreateDate,@date)%@expiringDays)' 然后当ExpireDays = 10它计算到4,当它是11它计算为6. 我在这里扭曲了一些东西,但我不知道是什么... – EJC 2011-05-18 22:57:06

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) 
相关问题