检查SQL中的日期是否重叠

时间:2015-02-23 11:59:09

标签: sql sql-server sql-server-2008

我有一个表tblBranchTimingEntry

+---------------+-------------------------+-------------------------+------------------+
| 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解决方案?

2 个答案:

答案 0 :(得分:3)

尝试这个逻辑:

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

取决于您的意思&#34;重叠&#34;可以是<=和/或>=

逻辑是:两个日期范围重叠是第一个在第二个结束之前开始,第一个在第二个结束之后结束。

答案 1 :(得分: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