Дан некий текущий месяц.
Событие попадает, если
1) его начало в текущий месяце;
2) его конец в текущий месяце;
3) его начало в месяце<текущего И конец в месце >текущего.
Всего три случая. Значит нужен WHERE (1 условие) OR (2е условие) OR (3 условие).
- Первое условие выполняется, если (start_time >= 01.НужныйМесяц.НужныйГод) AND (start_time < 01.НужныйМесяц+1.НужныйГод)
- Второе - по аналогии, но только уже с end_time.
- Третье - (start_time < 01.НужныйМесяц.НужныйГод) AND (end_time >= 01.НужныйМесяц+1.НужныйГод)
Вот пример, как это можно сделать. Только очень корявый, т.к. написан на SQLite. На MySQL будет чуток по-другому, но смысл тот же. Тестировал на
https://www.jdoodle.com/execute-sql-online/create table tab(id int, start text, end text);
/* YYYY-MM-DD */
insert into tab values(1, '2019-09-10', '2019-09-12');
insert into tab values(2, '2019-08-07', '2019-11-12');
insert into tab values(3, '2018-05-12', '2018-06-12');
insert into tab values(4, '2018-01-12', '2019-03-12');
insert into tab values(5, '2019-08-10', '2019-09-12');
insert into tab values(6, '2019-09-10', '2019-10-12');
insert into tab values(7, '2019-08-10', '2019-10-05');
insert into tab values(8, '2019-08-10', '2019-08-12');
insert into tab values(9, '2019-07-10', '2019-08-12');
insert into tab values(10, '2019-09-30', '2019-10-01');
select * from tab WHERE ((date(start) >= date('2019-09-01')) AND (date(start) < date('2019-10-01'))) OR ((date(end) >= date('2019-09-01')) AND (date(end) < date('2019-10-01'))) OR ((date(start) < date('2019-09-01')) AND (date(end) >= date('2019-10-01')));