CodePráticov3.3.0
SQL

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.