2011-05-18 252 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) 
相關問題