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

Cómo funciona TIMESTAMPDIFF() en MariaDB

En MariaDB, TIMESTAMPDIFF() es una función de fecha y hora incorporada que devuelve la diferencia entre dos expresiones de fecha o fecha y hora.

Sintaxis

La sintaxis es así:

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

Donde unit es uno de los siguientes valores:

  • MICROSECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • MONTH
  • QUARTER
  • YEAR

Las unidades pueden tener opcionalmente un prefijo de SQL_TSI_ .

TIMESTAMPDIFF() devuelve datetime_expr2 – datetime_expr1 .

Una expresión puede ser una fecha y la otra una fecha y hora. Los valores de fecha se tratan como si tuvieran una parte de tiempo de 00:00:00 donde sea necesario.

Ejemplo

Aquí hay un ejemplo para demostrarlo:

SELECT TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01');

Resultado:

+------------------------------------------------+
| TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01') |
+------------------------------------------------+
|                                             28 |
+------------------------------------------------+

Resultado Negativo

Cambiar las fechas proporciona un resultado negativo:

SELECT TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01');

Resultado:

+------------------------------------------------+
| TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01') |
+------------------------------------------------+
|                                            -28 |
+------------------------------------------------+

Valores de fecha y hora

Aquí hay un ejemplo de cómo pasar un valor de fecha y hora:

SELECT TIMESTAMPDIFF(
    HOUR, 
    '2030-02-01 00:00:00', 
    '2030-02-01 12:30:45'
    ) 
AS Result;

Resultado:

+--------+
| Result |
+--------+
|     12 |
+--------+

Especifiqué HOUR , por lo que ignora la parte de minutos y segundos.

Tipos mixtos

Aquí hay un ejemplo de pasar una fecha y un valor de fecha y hora:

SELECT TIMESTAMPDIFF(
    HOUR, 
    '2030-02-01', 
    '2030-02-01 12:30:45'
    ) 
AS Result;

Resultado:

+--------+
| Result |
+--------+
|     12 |
+--------+

Como se mencionó, los valores de fecha se tratan como si tuvieran una parte de tiempo de 00:00:00 .

Agregar un SQL_TSI_ Prefijo

La unidad puede incluir un SQL_TSI_ prefijo si es necesario:

SELECT TIMESTAMPDIFF(
    SQL_TSI_YEAR, 
    '2030-02-01', 
    '2035-02-01'
    )
AS Result;

Resultado:

+--------+
| Result |
+--------+
|      5 |
+--------+

Microsegundos

Aquí hay un ejemplo que devuelve microsegundos:

SELECT TIMESTAMPDIFF(
    MICROSECOND, 
    '2030-02-01 10:30:45.000000',
    '2030-02-01 10:30:45.123456'
    )
AS Result;

Resultado:

+--------+
| Result |
+--------+
| 123456 |
+--------+

Aquí hay uno en el que los microsegundos no se especifican realmente en los valores de fecha y hora:

SELECT TIMESTAMPDIFF(
    MICROSECOND, 
    '2030-02-01 10:30:45',
    '2030-02-01 12:30:45'
    )
AS Result;

Resultado:

+------------+
| Result     |
+------------+
| 7200000000 |
+------------+

Fecha actual

Podemos pasar NOW() uno de los argumentos de fecha y hora para comparar la fecha y hora actual con otra fecha:

SELECT 
    NOW(),
    TIMESTAMPDIFF(DAY, NOW(), '2021-03-31') AS Diff;

Resultado:

+---------------------+------+
| NOW()               | Diff |
+---------------------+------+
| 2021-05-30 09:29:01 |  -60 |
+---------------------+------+

Fechas nulas

Si una de las fechas es null , el resultado es null :

SELECT TIMESTAMPDIFF(
    YEAR, 
    '2030-02-01',
    NULL
    )
AS Result;

Resultado:

+--------+
| Result |
+--------+
|   NULL |
+--------+

Argumento faltante

Llamando a TIMESTAMPDIFF() con el número incorrecto de argumentos, o sin pasar ningún argumento, da como resultado un error:

SELECT TIMESTAMPDIFF();

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

Y otro ejemplo:

SELECT TIMESTAMPDIFF('2020-12-09');

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 '10, '2020-12-09')' at line 1