Как сделать запрос на период времени, основанный на другом периоде времени - PullRequest
0 голосов
/ 25 марта 2019

У меня есть таблица 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 голосов
/ 25 марта 2019

Попробуйте это

         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
0 голосов
/ 25 марта 2019

Из вашего поста я понимаю, что они подходят в какой-то момент между начальной и конечной датой, поскольку вы указали, что все четыре записи должны быть там.Вам нужно переключаться между совпадениями для даты начала и окончания

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.
0 голосов
/ 25 марта 2019

Я думаю, что вы в общем хотите перекрытия.Логика для этого:

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

Обратите внимание, что я упростил логику даты и времени, чтобы вам не приходилось беспокоиться о компоненте времени.

0 голосов
/ 25 марта 2019

изменить условие, в котором пункт

    select a.* from [dbo].[Bookings] a
    where StartDate >= '2019-03-22 00:00:00' AND EndDate <= '2019-03-22 23:59:59'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...