MySql dispone de un par de funciones para extraer fechas de un campo DateTime o TimeStamp, por ejemplo, para filtar una fecha y extraer el campo año tenemos las funciones YEAR(nombre_de_campo) y/o EXTRACT(YEAR FROM nombre_de_campo), en principio creo que son idénticas y no he visto ninguna diferencia y leído que los resultados con grandes volúmenes de datos son similares en tiempos. Si alguien puede aportar algo es bienvenido en los comentarios :-)
Dicho esto veamos como funcionan para agrupar los registros de la tabla payment y obtener en número total de registros por año
-- Utilizando la función YEAR
Select count(YEAR(payment_date)) as total, YEAR(payment_date) as año
FROM payment
GROUP BY YEAR(payment_date)
-- Utilizando EXTRACT
Select count(EXTRACT(YEAR FROM payment_date)) as total, EXTRACT(YEAR
FROM payment_date) as año FROM payment
GROUP BY EXTRACT(YEAR FROM payment_date)
Estas consultas nos devolveran un resultado como el de la imagen:
A partir de ahora solo utilizaré la función corta, YEAR, MONTH, DAY, HOUR .... para no repetir consultas.
En la siguiente consulta vamos a filtrar por año y contar cuantos payments se han realizado por mes
Select count(MONTH(payment_date)) as total, MONTH(payment_date) as mes, YEAR(payment_date) as año
FROM payment
GROUP BY YEAR(payment_date), MONTH(payment_date)
El resultado es el siguiente agrupado por año/mes
Y si quisiéramos solo un año en particular pondríamos el año como un filtro con Where
Select count(MONTH(payment_date)) as total, MONTH(payment_date) as mes, YEAR(payment_date) as año
FROM payment
Where YEAR(payment_date) = '2006'
GROUP BY YEAR(payment_date), MONTH(payment_date)
Tambien podemos filtrar por días y obtener los registros en un dia concreto.
Select count(DAY(payment_date)) as total, DAY(payment_date) as dia, MONTH(payment_date) as año
FROM payment
Where YEAR(payment_date) = '2005'
GROUP BY DAY(payment_date), MONTH(payment_date)
-- Solo los dias 21 y 27 de cualquier mes del año 2005
Select count(DAY(payment_date)) as total, DAY(payment_date) as dia, MONTH(payment_date) as año
FROM payment
Where YEAR(payment_date) = '2005' And DAY(payment_date) in (21, 27)
GROUP BY DAY(payment_date), MONTH(payment_date)
Con los campos datetime y timestamp también podemos realizar estos filtros con las horas, minutos y segundos utilizando las funciones HOUR, MINUTE y SECOND
Estas funciones para extraer partes de la fecha también podemos utilizarlas para realizar filtros como hemos visto en las ultimas consultas. Es algo muy interesante y de mucha utilidad a la hora de trabajar con fechas.
Y esto es todo amigos, feliz programming!
Saludos
Alex.
Añadir un comentarios:
yilson alexis malambo madrigal 10/05/2023 04:34:27Excelente muchas gracias |