mysql

Sumar y restar fechas con MySQL usando date_add y date_sub

Ya vimos cómo calcular la diferencia de fechas en años, meses, o cualquier tipo de medida en MySQL. Ahora veamos cómo operar con fechas; es decir, sumar y restar tiempo a fechas con MySQL.

Para operar fechas vamos a usar las funciones date_add y date_sub. Podremos sumar y restar estos intervalos de tiempo:

  • Años
  • Meses
  • Días
  • Horas
  • Semanas
  • Minutos

Y muchos más, así como combinaciones de los mismos. Al final dejo un enlace en donde listo y ejemplifico a todos ellos.

Antes, una pequeña advertencia

El propósito de este tutorial es enseñarte cómo sumar y restar intervalos de fechas usando MySQL, sin embargo hay que tener cuidado al confiar en el servidor.

Si el servidor es completamente tuyo, entonces sólo asegúrate de configurar bien la zona horaria. Si no, comprueba cuál zona horaria tiene, sobre todo si vas a usar funciones como NOW o CURDATE.

Funciones para operar con fechas en MySQL

Para que podamos sumar y restar fechas en MySQL vamos a utilizar dos funciones que suman y restan fechas; las cuales son DATE_ADD y DATE_SUB

Sumar un intervalo de tiempo a fecha en MySQL

Para esto usamos la función DATE_ADD que se traduce como “Agregar a fecha“. Lo que hace es que, dada una fecha, le suma un intervalo de tiempo; por ejemplo años, meses, semanas, días, etcétera.

Sintaxis de DATE_ADD

La sintaxis es:
DATE_ADD(fecha, intervalo de tiempo)

Ejemplos con DATE_ADD

Comencemos viendo un ejemplo sencillo:

select DATE_ADD('2018-01-01', INTERVAL 364 DAY);

En este caso, la fecha la definimos nosotros. Le estamos sumando 364 días al 1 de enero del 2018. El resultado es:
2018-12-31

Igualmente si tenemos una tabla con columnas que tienen fechas, podemos usar esta función así:
select fecha, DATE_ADD(fecha, interval 6 month) from eventos;

El resultado sería:

Sumar fechas en MySQL

Actualizar tabla sumando 1 día a fecha

Esta función de date_add viene de maravilla, por ejemplo, cuando queremos posponer un evento. La consulta quedaría así:

update eventos set fecha = date_add(fecha, interval 1 day);

De esta manera sumamos un día a la fecha. Si quieres ver los intervalos válidos, los dejo al final.

Usar date_add en MySQL para actualizar tabla

Nota: disculpa la posición de la marca de agua, algo pasó con el script que les pone la marca de agua.

Fecha del futuro con date_add

Podemos saber qué fecha será en un futuro usando esta función y NOW. Por ejemplo, ¿Qué fecha será dentro de 80 días?

La consulta quedaría así:
select date_add(now(), interval 80 day);

En ese caso usamos la función now, que da la fecha actual. El resultado es:
2019-02-18 23:29:52

Eso suponiendo que lo ejecutamos el 30 de noviembre a las 23:29:52

Más cosas con date_add

Puedes hacer cualquier cosa con esta función que suma fechas en MySQL; por ejemplo, actualizar columnas, insertar nuevas, etcétera; al final es una función que devuelve un resultado, y ese resultado puedes usarlo para lo que desees

Restar intervalo de tiempo con MySQL y date_sub

No me tomaré mucho tiempo con esta función, pues es lo contrario de date_add y sirve para restar fechas en MySQL. Es decir, es lo contrario de date_add, y podemos usarla para lo mismo pero restando tiempo o fechas.

Los intervalos

Como lo prometí, aquí dejo los intervalos válidos que podemos usar con date_add y date_sub. Los he puesto en un post separado, porque esta entrada se haría muy larga.

Intervalos para date_sub y date_add en MySQL.

Conclusiones y otras cosas

Sólo mencionar que podemos negar los números de los intervalos. Por ejemplo…

select date_sub('2018-01-01', interval 1 day);

Es lo mismo que:

select date_add('2018-01-01', interval -1 day);

Si no lo notas, quiero decir que si sumamos días negativos es como si hiciéramos una resta. Esto no es válido cuando operamos con formatos complejos, por ejemplo HH:MM:SS

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

  • CONSULTA : estoy dando los primeros pasos en sql y tengo el siguiente problema con el tema del campo fecha :
    1.) necesito migrar el campo dia ( de un campo fecha ) , a otro campo la misma tabla . Asi mismo con el campo año, y mes .
    muchas gracias . Salu2 desde Mendoza. Argentina

    • como consulta
      SELECT DAY(FECHA), MONTH(FECHA), YEAR(FECHA), FECHA FROM TABLA
      o si lo vas a actualizar
      UPDATE TABLA SET DIA=DAY(FECHA), MES=MONTH(FECHA), ANIO=YEAR(FECHA)

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 semanas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.