检查日期是否在SQL中重叠
我有一个表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)
这将检查重叠。
问题
这只有在输入日期落在数据库中的日期之间时才有效。 在这个例子中这将失败。
假设我将日期和日期设置为'2015-02-16'和'2015-08-27',则此查询不会返回任何内容。 但是这些日期之间有日期重叠。
ANy解决方案?
试试这个逻辑:
SELECT te.*
FROM [dbo].[tblBranchTimingEntry] te
WHERE BranchEntryId = 24 AND
'2015-01-14' < toDate AND
'2015-02-28' > fromDate;
取决于“重叠”可能<=
和/或>=
含义。
逻辑是:两个日期范围重叠,第一个在第二个结束之前开始,第二个在第二个开始之后结束。
尝试这个:
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之间
链接地址: http://www.djcxy.com/p/64175.html