如何根据其他时间段查询时间段

时间:2019-03-25 16:19:31

标签: sql sql-server

我有一个SQL表,其中有两列(StartDate和EndDate),其中包含以下记录:

StartDate                     EndDate
2019-03-21 02:00:00.0000000   2019-03-23 04:00:00.0000000
2019-03-22 02:00:00.0000000   2019-03-23 05:00:00.0000000
2019-03-22 07:00:00.0000000   2019-03-22 12:00:00.0000000
2019-03-22 01:00:00.0000000   2019-03-23 04:00:00.0000000

我还从应用程序中收到了两个自定义日期:

start_date ='2019-03-22 00:00:00'

end_date ='2019-03-22 23:59:59'

我已经尝试使用以下查询,但是没有返回所有适合的记录:

select * from [dbo].[Bookings]
where (StartDate <= '2019-03-22 00:00:00' AND EndDate >= '2019-03-22 23:59:59')
OR (StartDate >= '2019-03-22 00:00:00' AND EndDate <= '2019-03-22 23:59:59')

我想返回所有适合(或在此时间内)接收到的记录,在这种情况下,应该全部记录。

4 个答案:

答案 0 :(得分:0)

更改where子句中的条件

    select a.* from [dbo].[Bookings] a
    where StartDate >= '2019-03-22 00:00:00' AND EndDate <= '2019-03-22 23:59:59'

答案 1 :(得分:0)

在您的帖子中,我认为“适合”是指它们在开始日期和结束日期之间的某个时间处于活动状态,因为您指出所有这四个记录都应该在其中。您需要在开始日期和结束日期之间进行匹配

select * from dbo.Bookings 
where end_date >= '2019-03-22 00:00:00' -- records finish after custom start
and start_date <= '2019-03-22 23:59:59' -- but do not start beyond your desired window.

答案 2 :(得分:0)

我认为您通常希望重叠。这样做的逻辑是:

select b.*
from [dbo].[Bookings] b
where b.StartDate < '2019-03-23' AND
      b.EndDate >= '2019-03-22'

请注意,我简化了日期时间逻辑,因此您不必担心时间部分。

答案 3 :(得分:0)

尝试

         DECLARE @date DATETIME = '2019-03-22 00:00:00.000' , @Endate DATETIME= '2019-03-22 23:59:59.999'

 select a.* from [dbo].[tt] a 
 Where ( startDate <= @date or 
 EndDate>=@Endate)
 Union All 
 select a.* from [dbo].[tt] a 
 where StartDate >= @date AND EndDate <= @Endate