我有一个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')
我想返回所有适合(或在此时间内)接收到的记录,在这种情况下,应该全部记录。
答案 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