Как сделать запрос между двумя временными диапазонами, когда время было разделено на время начала и окончания с использованием MySQL? - PullRequest
0 голосов
/ 28 мая 2020

Как выполнить запрос между двумя временными диапазонами, используя MySQL?

он похож на этот вопрос, указанный в приведенной выше ссылке, но match_time был разделен на два столбца, то есть match_start_time и match_end_time,

match_start_time <= CAST('10:00:00' AS time) AND match_end_time >= (CAST('12:00:00' AS time))

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

пример

рассмотрим время начала и окончания совпадения: -

01:30 - 03:30, 05:00 - 06:30, 03:00 - 21:30, 14:00 - 09:00

тогда, если я пропущу 00:00 - 10:00 как min и max, тогда я получу

01:30 - 03:30, 05:00 - 06:30, 14:00 - 09:00

, но не уверен, нужно ли включать 14:00 - 09:00.

Также, если они пройдут 18:00 - 09:00

Тогда как получить результат, если указанное пользователем минимальное время больше максимального времени Извините за плохой английский sh, помогите

1 Ответ

0 голосов
/ 28 мая 2020

Вопрос немного двусмысленный. Вы можете преобразовать время в datetime и определить, к какой дате относится время:

select time_range, cast(time_to_match as time)
from (
  select 
    concat(m.match_start_time,'-',m.match_end_time) as 'time_range', 
    addtime(cast(concat('2020-01-', if(m.match_start_time<=m.match_end_time or m.match_start_time<t.match_time, '01', '02')) as datetime),t.match_time) as 'time_to_match',
    addtime(cast('2020-01-01' as datetime), m.match_start_time) as 'start_time',
    addtime(cast(concat('2020-01-', if(m.match_start_time<=m.match_end_time, '01', '02')) as datetime), m.match_end_time) as 'end_time'
  from times t
    join match_times m on 1=1
) as q
where time_to_match between start_time and end_time
order by 1,2;

См. db-fiddle .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...