Вопрос поставлен как-то странно, ибо у Вас в задании диапазон, а не конкретные даты.
Другими словами, можно понимать, что Вы ищете строки, диапазоны которых пересекают 9й месяц 2016-го года.
Значит получается, что начальная дата строки не должна превышать 2016-09-30, а конечная дата не должна быть раньше 2016-09-01. В упрощенном случае, когда дата начала в строке всегда меньше даты конца (если последняя не NULL), условие получится:
... WHERE (
startdate <= '2016-09-30' AND
(enddate IS NULL OR (enddate IS NOT NULL AND enddate >='2016-09-01'))
)
IS NULL перенесено в начало, т.к. в другом порядке могут возникать проблемы.
И Вам придется вычислять начальную и конечную дату выбранного месяца. Это можно делать при помощи php
public static function last_day_of_month($date_str = null)
{
if (empty($date_str)) {
return strtotime('23:59:59 last day of this month');
} else {
$d = new DateTime($date_str, new DateTimeZone(date_default_timezone_get()));
return $d->format('t');
}
}
public static function first_day_of_month($timestamp = null)
{
if (empty($timestamp))
return strtotime('00:00:00 first day of this month');
else
return strtotime('00:00:00 first day of this month', $timestamp);
}