Categorías: Tutoriales

Sumar y restar fechas con MySQL

Posiblemente en más de una ocasión habréis tenido que hacer consultas del estilo: “Contratos que vencen el mes que viene”, “Usuarios dados de baja el último mes”, “Noticias publicadas los últimos 10 días”… o similares para las que sueles necesitar realizar operaciones simples entre fechas.

Esta entrada es un pequeño recordatorio de las siguientes funciones de MySQL:

  • CURDATE(): Que nos devuelve la fecha actual.
  • DATE_ADD() y DATE_SUB(): Para sumar y restar fechas respectivamente.

Gracias a ellas podemos hacer consultas similares a las anteriores de forma directa. Veamos algunos ejemplos:
Contratos que terminan dentro de un mes

SELECT *
FROM contratos
WHERE finalizacion >= CURDATE() 
AND finalizacion <= DATE_ADD(CURDATE(), INTERVAL 30 DAY)

Contratos que terminaron la última semana:

SELECT *
FROM contratos
WHERE finalizacion <= CURDATE() 
AND finalizacion >= DATE_SUB(CURDATE(), INTERVAL 1 WEEK)

Hay muchas más funciones relacionadas con el tiempo y las fechas que os pueden sacar de un apuro y simplificaros mucho la vida. Os recuerdo que suele ser mucho mejor hacer una buena consulta que tratar posteriormente los datos que nos devuelve con la siguiente capa de nuestra aplicación. Tenéis la referencia en la web oficial de MySQL.

F. Javier Carazo Gil

Cofundador de CODECTION, empresa especializada en WordPress, autor de un libro sobre WordPress (el primero en español) y multitud de artículos (en medios físicos y virtuales) sobre el tema. Participa en la comunidad WordPress de forma activa siendo parte del equipo organizador de la WordPress Meetup de Córdoba, dando charlas en diferentes WordCamp y siendo autor y coautor de multitud de plugins libres y premium para WordPress de gran éxito.

Ver comentarios

  • La manipulación de las fechas en SQL siempre ha sido mi punto débil. No sabía el comando INTERVALE que aparecen los ejemplos.

    Muy buena Carazo, gracias por el aporte.

  • @Nacho: Me alegro que te sea útil, este tipo de funciones como digo aligeran no sólo la complejidad sino el tiempo de ejecución, que siempre es algo esencial en aplicaciones que interactúan contra servidores.

  • Excelente post
    justo necesitaba para listar las ventas de la ultima semana en trabajo de la universidad
    gracias!!!

  • Viejito, se te agradece me has salvado la vida, tenia que culminar una sistemilla para este mes, y por mas que intentaba ya no sabia que mas hacer, y tu sabes que te puede caer tu demanda por incumplimiento de contrato, en verdad hermano me salvaste. Muchas gracias y suerte!

  • @Denry: Me alegro que te haya ayudado. Como siempre digo, si queréis más información de cualquier tipo sobre cualquier tema, sólo tenéis que comentarlo.

  • jovenes como puedo sumarle a una fecha 10 meses es decir, hoy es 25 de julio, el 25 de mayo necesitaría que me saliera un registro ...

    • Santiago,

      Debes usar la misma función que te he dicho cambiando las unidades:

      DATE_ADD(CURDATE(), INTERVAL 10 MONTH)

  • Como sumo meses a una fecha si la cantidad de meses a sumar la tengo guardada en una tabla

Compartir
Publicado por
F. Javier Carazo Gil
Etiquetas: fechasmysql

Entradas recientes

DeepSeek

3 días hace

Contacto

2 semanas hace

Smart-tv mute

2 semanas hace

STEAM OS

3 semanas hace

2025

1 mes hace

El podcast de Linux Hispano – #072 – El hardware libre debe consolidarse como el software libre

https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.

1 mes hace