En MySQL, se puede utilizar la función DATE_SUB()
para restar una cantidad de tiempo especificada a una fecha. Por ejemplo, puede utilizarla para restar 7 días a una fecha determinada. Puede especificar si desea restar días, semanas, meses, trimestres, años, etc. También puede restar un valor de tiempo, como segundos, microsegundos, etc.
Esta función es similar a DATE_ADD()
, excepto que resta de una fecha en lugar de añadirla.
Sintaxis
La sintaxis es la siguiente:
DATE_SUB(date,INTERVAL expr unit)
Ejemplo 1 – Uso básico
Aquí tiene un ejemplo de uso.
SELECT DATE_SUB('2021-05-07', INTERVAL 5 DAY) AS Result;
Resultado:
+------------+| Result |+------------+| 2021-05-02 |+------------+
Este ejemplo resta 5 días a la fecha suministrada por el primer argumento.
Ejemplo 2 – Otras unidades de fecha
Se pueden especificar las unidades en días, semanas, meses, años, etc. Aquí hay algunos ejemplos.
SELECT '2021-05-07' AS 'Start Date', DATE_SUB('2021-05-07', INTERVAL 2 WEEK) AS '-2 Weeks', DATE_SUB('2021-05-07', INTERVAL 2 MONTH) AS '-2 Months', DATE_SUB('2021-05-07', INTERVAL 2 QUARTER) AS '-2 Quarters', DATE_SUB('2021-05-07', INTERVAL 2 YEAR) AS '-2 Years';
Resultado:
+------------+------------+------------+-------------+------------+| Start Date | -2 Weeks | -2 Months | -2 Quarters | -2 Years |+------------+------------+------------+-------------+------------+| 2021-05-07 | 2021-04-23 | 2021-03-07 | 2020-11-07 | 2019-05-07 |+------------+------------+------------+-------------+------------+
Ejemplo 3 – Unidades de tiempo
También puede restar unidades de tiempo a un valor de fecha/hora. Este es un ejemplo.
SELECT DATE_SUB('2021-05-07 10:00:00', INTERVAL 5 HOUR) AS Result;
Resultado:
+---------------------+| Result |+---------------------+| 2021-05-07 05:00:00 |+---------------------+
Y puede especificar múltiples unidades al mismo tiempo. Por ejemplo, puede especificar horas y minutos. Así.
SELECT DATE_SUB('2021-05-07 10:00:00', INTERVAL '1:30' HOUR_MINUTE) AS Result;
Resultado:
+---------------------+| Result |+---------------------+| 2021-05-07 08:30:00 |+---------------------+
Valores esperados
La siguiente tabla muestra los valores de unidad válidos y su formato esperado.
unit Valor |
Esperado expr Formato |
---|---|
MICROSECONDIO | MICROSECONDIOS |
SEGUNDO | SEGUNDOS |
MINUTO | MINUTOS |
HORA | HORAS |
DÍA | DÍAS |
SEMANA | SEMANAS |
MES | MESES |
TRIMESTRE | CUARTOS |
AÑO | AÑOS |
SEGUNDO_MICROSEGUNDO | ‘SEGUNDOS.MICROSEGUNDOS’ |
MINUTO_MICROSEGUNDO | ‘MINUTOS:SEGUNDOS.MICROSEGUNDOS’ |
MINUTO_SEGUNDO | ‘MINUTOS:SEGUNDOS’ |
HORA_MICROSEGUNDO | ‘HORAS:MINUTOS:SEGUNDOS.MICROSEGUNDOS’ |
HORA_SEGUNDO | ‘HORAS:MINUTOS:SEGUNDOS’ |
HORA_MINUTO | ‘HORAS:MINUTOS’ |
DÍA_MICROSEGUNDO | ‘DÍAS HORAS:MINUTOS:SEGUNDOS.MICROSEGUNDOS’ |
DÍA_SEGUNDO | ‘DÍAS HORAS:MINUTOS:SEGUNDOS’ |
DÍA_MINUTO | ‘DÍAS HORAS:MINUTOS’ |
DÍA_HORA | ‘DÍAS HORAS’ |
AÑO_MES | ‘AÑOS-MONTHS’ |
También puede utilizar la función SUBDATE()
para hacer lo mismo (es un sinónimo de la función DATE_SUB()
cuando se utiliza la misma sintaxis).
Además, la sintaxis de SUBDATE()
tiene una segunda forma, que es un método abreviado para restar un determinado número de días a una fecha. Para más información, ver Ejemplos de SUBDATE() en MySQL.