Como filtrar datas entre períodos em SQL
Veja formas seguras de filtrar DATE e DATETIME por período, evitando perder registros do último dia.
Quando a coluna é DATE
Se a coluna armazena somente data, um intervalo inclusivo é simples:
SELECT *
FROM pedidos
WHERE data_pedido BETWEEN '2026-09-01' AND '2026-09-30';
Quando existe hora na coluna
Para DATETIME ou TIMESTAMP, prefira um intervalo semiaberto: início inclusivo e próximo dia exclusivo.
SELECT *
FROM pedidos
WHERE criado_em >= '2026-09-01 00:00:00'
AND criado_em < '2026-10-01 00:00:00';
Isso evita problemas com horários como 23:59:59.999.
Evite função na coluna quando puder
Aplicar uma função diretamente na coluna pode impedir o uso eficiente de índices.
-- Evite em grandes volumes:
WHERE DATE(criado_em) = '2026-09-08'
-- Prefira:
WHERE criado_em >= '2026-09-08 00:00:00'
AND criado_em < '2026-09-09 00:00:00'
Considere o fuso horário
Importante: quando datas são armazenadas em UTC, converta corretamente a fronteira do período antes de consultar.
Assuntos:datasBETWEENperíodo