2015-02-02 4 views
0

У меня есть таблица, как это:Mysql запрос с диапазоном дат

Items start_datatime   end_datatime 
A1  2015-01-31 10:00:00 2015-02-02 20:30:00 
A2  2015-02-04 16:00:00 2015-02-04 16:30:00 

И я хочу, чтобы выбрать элементы для данного DateTime (например: 2015-02-02).

Итак, я пытаюсь этот вопрос:

SELECT Items FROM table WHERE start_datatime >= 2015-02-02 00:00:00 
AND end_datatime < 2015-02-03 00:00:00 

В этом примере я хочу, чтобы выбрать пункт A1 когда дата 2015-01-31, 2015-02-01 и 2015-02 -02. И A2, когда дата 2015-02-04.

+0

@MKhalidJunaid, да. Я только что исправил вопрос. – Christopher

ответ

1

Если вы хотите каких-либо записей, которые накладываются на эту дату, логика была бы:

SELECT Items 
FROM table 
WHERE start_datatime <= '2015-02-03 00:00:00' AND 
     end_datatime >= '2015-02-02 00:00:00'; 

Если вы хотите полного перекрытия так весь период включает день:

SELECT Items 
FROM table 
WHERE start_datatime <= '2015-02-02 00:00:00' AND 
     end_datatime >= '2015-02-03 00:00:00'; 

и, если вам будет только около полуночи, когда начнется день:

SELECT Items 
FROM table 
WHERE start_datatime <= '2015-02-02 00:00:00' AND 
     end_datatime >= '2015-02-02 00:00:00'; 
+0

Я получил то, что хочу с 'WHERE start_datatime <= '2015-02-02 23:59:59' AND end_datatime> = '2015-02-02 00: 00: 00'' – Christopher

+0

Лучше использовать' start_datatime < '2015-02-03'', а не 'start_datatime <=' 2015-02-02 23: 59: 59''. –

0

Удалите второе, где и она должна работать:

SELECT Items FROM table WHERE start_datatime >= 2015-02-02 00:00:00 AND end_datatime <= 2015-02-02 00:00:00 

Чтобы улучшить его, я бы изменить end_datatime <= 2015-02-02 00:00:00 к end_datatime < 2015-02-02 00:00:00, потому что ваше решение будет включать в себя все предметы, которые заканчиваются на следующий день.

Также рассматривайте предметы, которые начинаются до этого дня и заканчиваются после этого. Должны ли они быть исключены? В вашем решении это произойдет.

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