Я бы сохранял даты начала и окончания как собственные поля MySQL TIME .Вам нужно будет рассмотреть диапазоны, охватывающие полночь, как два отдельных диапазона, но вы сможете запросить таблицу следующим образом: найти все текущие периоды тишины
SELECT DISTINCT name FROM `quiet_periods`
WHERE start_time<=CURTIME() AND CURTIME()<=end_time
или найти все неактивные периоды тишины
SELECT name FROM quiet_periods WHERE name NOT IN (
SELECT name FROM `quiet_periods`
WHERE start_time<=CURTIME() AND CURTIME()<=end_time
)
То есть с примерами данных
id -- name -- start_time -- end_time
1 -- late_night -- 00:00:00 -- 08:30:00
2 -- late_night -- 22:00:00 -- 23:59:59
3 -- null_period -- NULL -- NULL
4 -- nearly_10am -- 09:53:00 -- 09:55:00
В 23:00 это будет возвращать
null_period
nearly_10am
из второго запроса.
В зависимости от производительности исколько у вас было строк, возможно, вы захотите реорганизовать второй запрос в JOIN и, возможно, также добавить соответствующие индексы.