Excluindo hora do dia a partir do dia da semana em consulta MySQL

votos
1

Tentando selecionar dados de certos dias da semana, digamos que de segunda a sexta-feira, mas na sexta-feira que ele precisa ser antes de um determinado período de tempo, digamos 16:30. Esta é puxando a partir de anos de dados, por isso é mais de um filtro no topo de um intervalo de datas. Atualmente a seguir é usado para filtrar apenas alguns dias da semana:

SELECT *
FROM sometable
WHERE DAYNAME(created) IN ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday');

Mas ele precisa adicionar uma condição para não puxar os dados que foram criados após 4:30 na sexta-feira. Algo como:

DAYNAME(created) = Friday AND HOUR(created) <= 16 AND MINUTE(created) <= 30

Com a adição do acima para whereela só vai agarra sexta-feira antes 4h e antes de 30 minutos da hora.

Alguma sugestão?

Publicado 10/10/2019 em 00:43
fonte usuário
Em outras línguas...                            


2 respostas

votos
0

Uma solução seria adicionar um conjunto separado de condições para o domingo. Também eu recomendo usar WEEKDAY()(o número do dia da semana, começando segunda-feira), porque isso permite encurtar a consulta usando operador de comparação BETWEEN:

SELECT *
FROM sometable
WHERE 
    WEEKDAY(created) BETWEEN 1 AND 4
    OR (WEEKDAY(created) = 5 AND HOUR(created) <= 16)

Se você quiser 4:30 em vez de 4:00, então você pode usar uma abordagem ligeiramente diferente e extrair toda a parte da hora do datetime para comparação:

SELECT *
FROM sometable
WHERE 
    WEEKDAY(created) BETWEEN 1 AND 4
    OR (WEEKDAY(created) = 5 AND CONVERT(created, time) <= '16:30')
Respondeu 10/10/2019 em 00:51
fonte usuário

votos
0

Seria algo como isto resolveu seu problema?

SELECT *
FROM sometable
WHERE DAYNAME(created) IN ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')
AND HOUR(created) <= CASE WHEN DAYNAME(created) = "Friday" THEN 16 ELSE 24 END;
Respondeu 10/10/2019 em 00:48
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more