Eu tentei pesquisar SO para esta questão e não consegui encontrar nada relacionado ao mySQL.
Eu tenho uma tabela que contém vários dados, mas para esta pergunta, os dados relevantes são o dia da semana, a hora de início e a hora de término.
Estou tentando obter os registros que correspondem a um dia da semana em que now () está dentro do intervalo de tempo correspondente. No entanto, o problema é que a hora de início PODE ser maior que a hora de término ou vice-versa, ou a hora também pode ser apenas 00:00:00.
Campos relevantes e dados de exemplo para a tabela page_data
:
field_value | start_time | end_time
------------+------------+---------
Monday | 17:00:00 | 08:00:00
Tuesday | 17:00:00 | 08:00:00
Wednesday | 17:00:00 | 08:00:00
Thursday | 17:00:00 | 08:00:00
Friday | 17:00:00 | 08:00:00
Saturday | 00:00:00 | 00:00:00
Sunday | 00:00:00 | 00:00:00
Algumas notas:
- 00:00:00 - 00:00:00 basicamente significa correr o dia todo
- se a hora de início for maior que a hora de término, como 17:00 - 8:00, isso significaria correr das 17h às 8h do dia seguinte.
Eu tentei now() between start_time and end_time
, mas isso não cobre start_time > end_time.
Abaixo está o que tenho até agora, mas ele retorna quando não deveria.
10:00:00 é um horário de teste que não deveria retornar nada, mas retorna.
Para testar, estou codificando um tempo em vez de usarnow()
se eu remover or ('10:00:00' between end_time and start_time)
, start_time sendo maior não retornará nada.
select * from page_data
where field_value = 'Friday'
and (
(start_time = '00:00:00' and end_time = '00:00:00') or
('10:00:00' between start_time and end_time) or
('10:00:00' between end_time and start_time)
)
Estou perplexo com a consulta que posso usar para levar em consideração estas considerações:
- Hora inicial > Hora final
- Hora de término > Hora de início
- Hora de término e hora de início = 00:00:00
Obrigado