2012-03-08 130 views
1

由於this question,我有一個問題但部分解決了,但知道我想知道如何計算給定間隔內的天數。在另一個給定的日期間隔(期間)內計算日期間隔(期間)的天數

這是一個查詢計算僱員有多少天去度假。因此給定(或不給定)日期範圍,我想要計算給定時間間隔內有多少個假期。

Currenty我的SQL是這樣的:

SELECT SUM(DATEDIFF(vacation_end_date,vacation_start_date)) 
FROM vacation WHERE vacation_end_date >= given_start_date 
AND vacation_start_date <= given_end_date' 

我知道thatthe DATEDIFF將僅適用於內給定範圍內天的工作,但它不應該從給定的範圍之外,數天。

請幫幫我,找不到堆棧溢出類似的東西。

回答

4

如果vacation_end_date是一天的人是休假,而不是他的最後一天休假,查詢到得到2012-01-01(含)和2013-01-01(含)之間的假期;

SELECT SUM(
GREATEST(0, 
    DATEDIFF(
    LEAST('2013-01-01', vacation_end_date), 
    GREATEST('2012-01-01', vacation_start_date) 
))) 'VACATION_DAYS' 
FROM vacation; 

如果vacation_end_date是他最後一天的假期,你需要在查詢ADDDATE(vacation_end_date, INTERVAL 1 DAY))更換vacation_end_date以上,以獲得正確的計算。

簡單的演示here

+0

謝謝,它工作:) – Skatox 2012-03-10 01:23:11

1

如果我理解正確你的問題,使用COUNT應該得到你想要的東西:

SELECT COUNT(
     DATEDIFF(vacation_end_date, 
      if(vacation_start_date < given_start_date, 
       given_start_date, 
       vacation_start_date) 
     ) 
    ) 
FROM vacation WHERE vacation_end_date >= given_start_date 
AND vacation_start_date <= given_end_date' 
+0

沒有,因爲如果假期開始給定的日期,前(例如前3天),它會計算這3天。我想從給定的日期開始計算這種情況。 – Skatox 2012-03-08 21:10:36

+0

請檢查更新的答案,在這種情況下,如果假期開始前給定的日期,它會評估,如果確實如此,它會根據給定的日期COUN(同樣是可以的,如果你需要vacation_end_date相同條件下進行) – DarkAjax 2012-03-08 21:21:58

+0

感謝它的工作,但另一種解決方案更簡單。感謝您及時的回覆。 – Skatox 2012-03-10 01:22:58