2014-02-20 7 views
-3

(я нашел логику решения здесь: Determine Whether Two Date Ranges Overlap)mySQL диапазон диапазонов дат, как сравнивать?

структура таблицы:

contracts[start_date, end_date] 

Моя форма использует два входа, inp_start_date и inp_end_date. Я хочу использовать их значения для выбора контрактов, находящихся в диапазоне.

Пример (псевдо):

  1. договор действует между его датой_начала к его датой_окончанию.
  2. Получить все контракты, которые действительны, между inp_start_date к inp_end_date

Что является лучшим способом создать условия для этого запроса?


редактировать

Примеры:
если мой inp_start_date is 5/21/2005
и inp_end_date is 9/21/2005
то отберет контракты, которые начинаются и заканчиваются ДО И ПОСЛЕ inp_start_date и inp_end_date, до тех пор, как это был действительным в этом интервале времени, даже частично.

Запрос найдет все контракты, что их диапазон дат, пересекает диапазоны дат inp_start и inp_end.

контракта и пример входов:

contract.start_date = 1.1.2001 |#| contract.end_date = 5.31.2001 
input.start_date = 10.21.2000 |#| input.end_date = 2001.3.21 

Этот контракт должен быть пойман, так как по крайней мере часть его находится в диапазоне.

+0

Что вопрос на самом деле о? Вы знаете, как это сделать * любым способом *? Это базовое сравнение двух столбцов с 'AND'. – zerkms

+2

Даты можно сравнить, как и все остальное. Используйте «<' or '>» или «МЕЖДУ». Если у вас есть проблема с этим, сообщите нам более конкретный вопрос, и мы можем вам помочь. –

+0

, пожалуйста, перечитайте мой вопрос .. это не единственная дата! в пределах диапазона. это диапазон в пределах диапазона. проверьте редактирование, пожалуйста. – yossi

ответ

1

Предполагая, что вы подтверждающие ваш вклад и что он находится в правильном формате, вы можете попробовать BETWEEN clause или >= и <= операторов:

SELECT id 
FROM contracts 
WHERE start_date >= <inp_start_date> AND end_date <= <inp_end_date> 
Смежные вопросы