sql >> Base de Datos >  >> RDS >> MariaDB

Cómo funciona SUBDATE() en MariaDB

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