2015-02-23 47 views
3

重疊我有一個表tblBranchTimingEntry檢查日期是在SQL

+---------------+-------------------------+-------------------------+------------------+ 
| BranchEntryID |  fromDate   |   toDate   |  SundayIn  | 
+---------------+-------------------------+-------------------------+------------------+ 
|   24 | 2015-01-01 00:00:00.000 | 2015-01-31 00:00:00.000 | 12:00:00.0000000 | 
|   24 | 2015-02-01 00:00:00.000 | 2015-02-15 00:00:00.000 | 12:00:00.0000000 | 
|   24 | 2015-03-01 00:00:00.000 | 2015-03-31 00:00:00.000 | 00:00:00.0000000 | 
|   24 | 2014-01-01 00:00:00.000 | 2014-12-31 00:00:00.000 | 00:00:00.0000000 | 
+---------------+-------------------------+-------------------------+------------------+ 

要求

我給輸入BranchEntryID,沒有fromdate,TODATE,我要檢查,如果之間的任何日期fromDate和toDate與存儲在tblBranchTimingEntry中的日期範圍重疊。


我做了什麼至今

我有這個疑問

SELECT 
     * 
    FROM 
     [dbo].[tblBranchTimingEntry] 

    WHERE 
     BranchEntryId = 24 
    AND 
     ('2015-01-14' BETWEEN fromDate AND toDate OR '2015-02-28' BETWEEN fromDate AND toDate) 

這將檢查的重疊。


問題

如果輸入日期落在目前在DB日期間這隻會工作。 這個例子會失敗。

假設我給日期和日期爲'2015-02-16'和'2015-08-27', 此查詢不會返回任何內容。但是這些日期之間有日期重疊。

ANy解決方案?

+0

的可能重複[確定是否兩個日期範圍重疊(HTTP://計算器的.com /問題/ 325933 /確定-是否-兩日期範圍,重疊) – Magnus 2015-02-23 12:20:34

回答

2

試試這個邏輯:

SELECT te.* 
FROM [dbo].[tblBranchTimingEntry] te 
WHERE BranchEntryId = 24 AND 
     '2015-01-14' < toDate AND 
     '2015-02-28' > fromDate; 

根據你所說的 「重疊」,可能是<=和/或>=什麼。

邏輯是:兩個日期範圍重疊是第一個開始之前的第二個結束和第二個開始後的第一個結束。

1

試試這個:

SELECT 
     * 
FROM 
     [dbo].[tblBranchTimingEntry] 
WHERE 
    BranchEntryId = 24 
AND 
    (('2015-01-14' < toDate AND 
    '2015-01-14' > fromDate) or ('2015-02-28' > fromDate and '2015-02-28' < toDate) or ('2015-02-28' > toDate AND 
    '2015-01-14' < fromDate)) 

要檢查這樣,如果任何的日期是速滑運動員的肌肉沒有fromdate和todate