Publicidad

Extraer día, mes, año y hora de una fecha en MySql


Por Alex el 10/11/2021 , Comentar el artículo

Comparte este artículo:        




Trabajar con fechas en consultas MySql suele ser lo mas normal a la hora de filtrar u obtener datos y puede ser algo liado si no conocemos las funciones de fecha que tiene MySql ...


Vamos a hacer con ejemplos prácticos utilizando la base de datos de ejemplo de MySql, sakila, en este artículo podéis acceder a la descarga de la base de datos si no la tenéis: Bases de datos de pruebas para MySql. Y utilizaremos la tabla payment para filtrar el campo payment_date y así agrupar y filtrar por meses, años y días los registros

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:

Extraer año de una fecha en MySql

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

Agrupar registros por año y mes en MySql

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)

Agrupar registros por día y mes en MySql

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.



Si te ha gustado el artículo compartelo en:      




Añadir un comentarios:

Nombre:
Email: (no se publica el email)




SIGUENOS EN

ARCHIVO

Publicidad

.