En MariaDB, SUBDATE()
es una función de fecha y hora incorporada que resta una cantidad de una fecha dada.
Le permite cambiar una fecha especificando la fecha, la unidad a restar y la cantidad a restar. Puede pasar una cantidad negativa para agregar a la fecha, en lugar de restarle.
SUBDATE()
también tiene una sintaxis abreviada que le permite especificar los días a restar.
Sintaxis
El SUBDATE()
la función tiene dos sintaxis.
Sintaxis 1:
SUBDATE(expr,days)
Donde expr
es la fecha y days
es el número de días a restar.
Sintaxis 2:
SUBDATE(date,INTERVAL expr unit)
Donde date
es la fecha a cambiar, expr
es la cantidad a restar, y unit
es la unidad de fecha/hora a restar (por ejemplo, segundo, minuto, etc.).
Al usar esta sintaxis, SUBDATE()
es un sinónimo de DATE_SUB()
.
Ejemplo:sintaxis 1
Aquí hay un ejemplo del uso de la primera sintaxis:
SELECT SUBDATE('2021-05-01', 1);
Resultado:
+--------------------------+ | SUBDATE('2021-05-01', 1) | +--------------------------+ | 2021-04-30 | +--------------------------+
También podemos incluir la porción de tiempo si es necesario:
SELECT SUBDATE('2021-05-01 10:00:00', 1);
Resultado:
+-----------------------------------+ | SUBDATE('2021-05-01 10:00:00', 1) | +-----------------------------------+ | 2021-04-30 10:00:00 | +-----------------------------------+
Aquí hay dos formas alternativas de hacer lo mismo:
SELECT
DATE_SUB('2021-05-01 10:00:00', INTERVAL 1 DAY) AS "Result 1",
'2021-05-01 10:00:00' - INTERVAL 1 DAY AS "Result 2";
Resultado:
+---------------------+---------------------+ | Result 1 | Result 2 | +---------------------+---------------------+ | 2021-04-30 10:00:00 | 2021-04-30 10:00:00 | +---------------------+---------------------+
Ejemplo:sintaxis 2
Aquí hay un ejemplo del uso de la segunda sintaxis:
SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HOUR);
Resultado:
+-------------------------------------------------+ | SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HOUR) | +-------------------------------------------------+ | 2021-05-31 09:00:00 | +-------------------------------------------------+
Esta sintaxis nos permite restar otras unidades de la fecha (es decir, no solo los días). Aquí resté una hora de la fecha, pero podría haber restado fácilmente minutos, segundos, meses, días, años, etc. Ejemplos más adelante.
Aquí hay dos métodos alternativos para lograr el mismo resultado que el ejemplo anterior:
SELECT
DATE_SUB('2021-05-31 10:00:00', INTERVAL 1 HOUR) AS "Result 1",
'2021-05-31 10:00:00' - INTERVAL 1 HOUR AS "Result 2";
Resultado:
+---------------------+---------------------+ | Result 1 | Result 2 | +---------------------+---------------------+ | 2021-05-31 09:00:00 | 2021-05-31 09:00:00 | +---------------------+---------------------+
Intervalos negativos
Proporcionar un intervalo negativo agrega esa cantidad a la fecha.
Ejemplo:
SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL -1 HOUR);
Resultado:
+--------------------------------------------------+ | SUBDATE('2021-05-31 10:00:00', INTERVAL -1 HOUR) | +--------------------------------------------------+ | 2021-05-31 11:00:00 | +--------------------------------------------------+
Otras Unidades
Aquí hay un ejemplo que resta un intervalo de 1 de las distintas unidades de fecha y hora:
SELECT
SUBDATE('2021-05-01 10:00:00', INTERVAL 1 YEAR) AS YEAR,
SUBDATE('2021-05-01 10:00:00', INTERVAL 1 MONTH) AS MONTH,
SUBDATE('2021-05-01 10:00:00', INTERVAL 1 DAY) AS DAY,
SUBDATE('2021-05-01 10:00:00', INTERVAL 1 HOUR) AS HOUR,
SUBDATE('2021-05-01 10:00:00', INTERVAL 1 MINUTE) AS MINUTE,
SUBDATE('2021-05-01 10:00:00', INTERVAL 1 SECOND) AS SECOND,
SUBDATE('2021-05-01 10:00:00', INTERVAL 1 MICROSECOND) AS MICROSECOND;
Resultado (usando salida vertical):
YEAR: 2020-05-01 10:00:00 MONTH: 2021-04-01 10:00:00 DAY: 2021-04-30 10:00:00 HOUR: 2021-05-01 09:00:00 MINUTE: 2021-05-01 09:59:00 SECOND: 2021-05-01 09:59:59 MICROSECOND: 2021-05-01 09:59:59.999999
Unidades compuestas
Aquí hay un ejemplo que usa unidades compuestas:
SELECT
SUBDATE('2021-05-01 10:00:00', INTERVAL '1:2' YEAR_MONTH) AS "YEAR_MONTH",
SUBDATE('2021-05-01 10:00:00', INTERVAL '1:25:35' HOUR_SECOND) AS "HOUR_SECOND",
SUBDATE('2021-05-01 10:00:00', INTERVAL '1:30' DAY_MINUTE) AS "DAY_MINUTE";
Resultado:
+---------------------+---------------------+---------------------+ | YEAR_MONTH | HOUR_SECOND | DAY_MINUTE | +---------------------+---------------------+---------------------+ | 2020-03-01 10:00:00 | 2021-05-01 08:34:25 | 2021-05-01 08:30:00 | +---------------------+---------------------+---------------------+
Fechas nulas
Pasando null
para la fecha devuelve null
:
SELECT SUBDATE(null, INTERVAL 1 YEAR);
Resultado:
+--------------------------------+ | SUBDATE(null, INTERVAL 1 YEAR) | +--------------------------------+ | NULL | +--------------------------------+
Argumento faltante
Llamando a SUBDATE()
con el número incorrecto de argumentos, o sin pasar ningún argumento da como resultado un error:
SELECT SUBDATE();
Resultado:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1