2013-09-18 2 views
0

У меня есть эти две колонки:диапазон дат между двумя даты колонки

start_dt     end_dt 
2013-09-18 14:00:00  2013-09-18 16:00:00 

Я хочу, чтобы выбрать строки между этими двумя датами (хранятся в виде DateTime в MYSQL), так что ...

SELECT * 
FROM task_schedule_times 
WHERE `start_dt` >= "2013-09-18 14:00:00" 
AND `end_dt` <= "2013-09-18 16:00:00" 

Это прекрасно, но мне нужно, чтобы иметь возможность вернуть вышеуказанную строку, если поиск на любые даты в пределах start_dt и end_dt:

«2013-09-18 15:00:00» и «2013-09-18 15:30:00»

Визуальный representantion (строка представляет собой временной интервал):

entry1: ----------------- 
select:  --------- 

мне также нужно возвращать строку, если диапазон дат Прилагаемые падает в любом месте в пределах диапазона от строки

entry1: ----------------- 
select:  ---------------------- 

или

entry1:   ----------------- 
select: ----------------- 

Нет результатов должны отображаться в случае, например, так:

entry1:  ----------------- 
select: ------- 

Надеется, что эти творческие входы объяснить вещи лучше, чем я могу со словами.

+0

Возможный дубликат [Выбор диапазона выбора даты в MySQL] (http://stackoverflow.com/questions/4897133/mysql-select-date-range-issue) – DevlshOne

+0

@DevlshOne Этот вопрос является abou t один столбец между двумя датами, это не предполагает сравнения двух столбцов. – Barmar

ответ

3

Похоже, что вы ищете перекрывающиеся периоды времени. Два периода перекрываются, когда один начинает перед другими заканчивается и первый заканчивается после второго начинается:

SELECT * 
FROM task_schedule_times 
WHERE `end_dt` >= "2013-09-18 14:00:00" AND 
     `start_dt` <= "2013-09-18 16:00:00" 
3

entry start должен быть всегда <= из select end

entry end должна быть всегда >= из select start

SELECT * 
FROM task_schedule_times 
WHERE `start_dt` <= "2013-09-18 16:00:00" 
AND `end_dt` >= "2013-09-18 14:00:00" 
1

Если я вас правильно понял, вы ищете что-то вроде этого:

SELECT * 
FROM `task_schedule_times` 
WHERE (`start_dt` BETWEEN "2013-09-18 14:00:00" AND "2013-09-18 16:00:00") 
OR (`end_dt` BETWEEN "2013-09-18 14:00:00" AND "2013-09-18 16:00:00") 
Смежные вопросы