2015-06-25 2 views
0

У меня есть таблица нечто подобное:Получение записей между диапазоном дат частности

ID  SartTime    EndTime    
    1 06-24-2015 08:00 06-24-2015 08:30 
    2 06-24-2015 08:30 06-24-2015 09:00 
    3 06-24-2015 09:00 06-24-2015 09:30 
    4 06-24-2015 09:30 06-24-2015 10:00 

Как реализовать запрос, в котором в состоянии, если начальное и конечное время 06-24-2015 8:00 и 06-24-2015 09:00 Я получаю первые две записи и в состоянии, если время начала и окончания 06-24-2015 08:00 и 06-24-2015 09:15 Я получаю первые три записи. Также в условии, если время начала и окончания 06-24-2015 08:15 и 06-24-2015 09:15 Мне нужно получить первые три записи

Спасибо за помощь заранее.

ответ

0
Declare @starttime datetime = '6-24-15 08:00:00' 
Declare @endtime datetime = '6-24-15 09:00:00' 

Select * from MyTable 
where StartTime <= @endtime and endtime >= @starttime 

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

В зависимости от требований проекта, вы можете настроить >= к > и т.д.

+0

Это сработало, спасибо большое. – user2502961

0

я не вижу, какую платформу вы используя указанные, так оговоркой, что следующее относится к MSSQL Server ,

Если ваши столбцы «StartTime» и «EndTime» определены как типы даты и времени в SQL, тогда сервер будет выполнять тяжелый подъем преобразования вашего запроса в соответствующие типы. Здесь вы, вероятно, можете просто использовать обычные>, <, = операторы в своем WHERE (или BETWEEN, если вы так склонны), чтобы выполнить то, что вы хотите сделать.

Что касается второй части вашего вопроса, если вы в основном хотите включить (дополнительный) 15-минутный «лаг» в свои конечные времена и 15-минутный «толчок» в свое время начала, вы можете использовать DATEADD, чтобы сделать что-то вроде:

SELECT * FROM [myTable] 
WHERE 
(StartTime >= @startTime AND EndTime <= @endTime) OR 
(StartTime >= @startTime AND DATEADD(minute, -15, EndTime) <= @endTime) OR 
(DATEADD(minute, 15, StartTime) >= @startTime AND EndTime <= @endTime) OR 
(DATEADD(minute, 15, StartTime) >= @startTime AND DATEADD(minute, -15, EndTime) <= @endTime) 

Это, конечно, имеет смысл только, если данные представлены только в целом или с шагом полчаса.

Документы для DATEADD перечислены ниже:

https://msdn.microsoft.com/en-us/library/ms186819.aspx

Надеется, что это помогает!

Смежные вопросы