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