Filtrar periodos con intervalos de fechas
Objetivos
Al terminar podrás seleccionar un periodo completo sin asumir que una fecha contiene solo medianoche.
Concepto
Una columna DATETIME o TIMESTAMP puede incluir hora, minuto y segundo. Para un mes, usa el primer instante del mes como límite incluido y el primer instante del mes siguiente como límite excluido.
La forma >= inicio AND < siguiente_inicio evita depender de una hora final como 23:59:59, que podría dejar fuera una fracción de segundo. Cambia ambas fechas al periodo que quieras estudiar.
Ejemplo
SELECT payment_id, payment_date, amount
FROM payment
WHERE payment_date >= '2005-05-01'
AND payment_date < '2005-06-01'
ORDER BY payment_date, payment_id
LIMIT 10;Se incluyen todas las horas del 1 de mayo y se excluye exactamente el inicio de junio. Este ejemplo se limita a diez filas para inspección; quita LIMIT si necesitas exportar todo el periodo.
Práctica guiada
- Cambia el intervalo a junio de 2005: usa el 1 de julio como límite excluido.
- Sustituye
<por<=y explica qué pasaría con una fila exactamente en el límite. - Añade un conteo para conocer cuántas filas pasan el filtro sin mostrar detalles.
Reto
Escribe un filtro para todo el año 2005. Incluye el 1 de enero y excluye el inicio de 2006. Verifica una fila de inicio y una de cierre antes de resumirla.
Quiz
¿Por qué se usa < '2005-06-01' para cerrar mayo?
- A. Para excluir el primer instante de junio y mantener todas las horas de mayo.
- B. Para excluir el día completo 31 de mayo.
- C. Para convertir la fecha en texto.
Respuesta: A. El límite exclusivo hace que el intervalo cubra mayo completo, incluso con fracciones de segundo.
Comprobación
Ya filtras un intervalo sin inventar una hora final. La siguiente lección agrupa fechas y explica qué periodos no aparecen en los datos.