Tenho uma tabela que armazena o horário de início e término de alguns eventos. Quero pesquisar nesta tabela todos os eventos que ocorreram em um dia específico.
Aqui estão dados de exemplo:
Eu ia | Data de início | Data final | Nome |
---|---|---|---|
1 | 18/04/2024 13:30:45 | 18/04/2024 15:30:45 | 18-04 |
2 | 14/04/2024 13:30:45 | 18/04/2024 15:30:45 | 18-04 |
3 | 15/04/2024 13:30:45 | 15/04/2024 15:30:45 | 15-04 |
4 | 14/04/2024 13:30:45 | 14/04/2024 15:30:45 | 14-04 |
5 | 12/04/2024 13:30:45 | 12/04/2024 15:30:45 | 12-04 |
6 | 18/03/2024 13:30:45 | 18/03/2024 15:30:45 | 18-03 |
7 | 15/03/2024 13:30:45 | 16/03/2024 15:30:45 | 15-03 |
8 | 14/03/2024 13:30:45 | 15/03/2024 15:30:45 | 14-03 |
9 | 12/03/2024 13:30:45 | 13/03/2024 15:30:45 | 12-03 |
Se eu quiser dados para 14/04, esta é a saída excetuada:
Eu ia | Data de início | Data final | Nome |
---|---|---|---|
2 | 14/04/2024 13:30:45 | 18/04/2024 15:30:45 | 18-04 |
4 | 14/04/2024 13:30:45 | 14/04/2024 15:30:45 | 14-04 |
Aqui está minha consulta:
SELECT * FROM content WHERE
DATE_FORMAT(dateBegin, '%d/%m/%Y') <= '14/04/2024'
AND
DATE_FORMAT(dateEnd, '%d/%m/%Y') >= '14/04/2024'
Mas aqui está minha saída real:
Eu ia | Data de início | Data final | Nome |
---|---|---|---|
2 | 14/04/2024 13:30:45 | 18/04/2024 15:30:45 | 18-04 |
4 | 14/04/2024 13:30:45 | 14/04/2024 15:30:45 | 14-04 |
8 | 14/03/2024 13:30:45 | 15/03/2024 15:30:45 | 14-03 |
Por que recebo uma linha do dia certo, mas de outro mês?
Fiz um Db Fiddle para mostrar esse problema.
Como posso consertar isso?
Nota: estou usando o MariaDB 10.11.4.
Experimente isto:
O problema é que você está convertendo seus datetimes em strings. E a comparação de strings se comporta... de maneira diferente.
A string '14/0 3/2024 ' <= '14/0 4/2024 '? Sim.
A string '1 5/03/2024 ' >= '1 4/04/2024 '? Sim.
(Ênfase no primeiro caractere diferente, que determina a ordem.)