No MariaDB,
TIMESTAMPDIFF()
é uma função de data e hora integrada que retorna a diferença entre duas expressões de data ou data e hora. Sintaxe
A sintaxe fica assim:
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
Onde
unit
é um dos seguintes valores:MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
As unidades podem opcionalmente ter um prefixo de
SQL_TSI_
. TIMESTAMPDIFF()
retorna datetime_expr2
– datetime_expr1
. Uma expressão pode ser uma data e a outra um datetime. Os valores de data são tratados como tendo uma parte de tempo de
00:00:00
onde necessário. Exemplo
Segue um exemplo para demonstrar:
SELECT TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01');
Resultado:
+------------------------------------------------+ | TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01') | +------------------------------------------------+ | 28 | +------------------------------------------------+
Resultado Negativo
Alternar as datas fornece um resultado negativo:
SELECT TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01');
Resultado:
+------------------------------------------------+ | TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01') | +------------------------------------------------+ | -28 | +------------------------------------------------+
Valores de data e hora
Aqui está um exemplo de como passar um valor de data e hora:
SELECT TIMESTAMPDIFF(
HOUR,
'2030-02-01 00:00:00',
'2030-02-01 12:30:45'
)
AS Result;
Resultado:
+--------+ | Result | +--------+ | 12 | +--------+
Eu especifiquei
HOUR
, e por isso ignora a parte de minutos e segundos. Tipos mistos
Aqui está um exemplo de como passar um valor de data e data e hora:
SELECT TIMESTAMPDIFF(
HOUR,
'2030-02-01',
'2030-02-01 12:30:45'
)
AS Result;
Resultado:
+--------+ | Result | +--------+ | 12 | +--------+
Conforme mencionado, os valores de data são tratados como tendo uma parte de tempo de
00:00:00
. Adicionando um SQL_TSI_
Prefixo
A unidade pode incluir um
SQL_TSI_
prefixo se necessário:SELECT TIMESTAMPDIFF(
SQL_TSI_YEAR,
'2030-02-01',
'2035-02-01'
)
AS Result;
Resultado:
+--------+ | Result | +--------+ | 5 | +--------+
Microsegundos
Aqui está um exemplo que retorna microssegundos:
SELECT TIMESTAMPDIFF(
MICROSECOND,
'2030-02-01 10:30:45.000000',
'2030-02-01 10:30:45.123456'
)
AS Result;
Resultado:
+--------+ | Result | +--------+ | 123456 | +--------+
Aqui está um em que os microssegundos não são realmente especificados nos valores de data e hora:
SELECT TIMESTAMPDIFF(
MICROSECOND,
'2030-02-01 10:30:45',
'2030-02-01 12:30:45'
)
AS Result;
Resultado:
+------------+ | Result | +------------+ | 7200000000 | +------------+
Data atual
Podemos passar
NOW()
um dos argumentos datetime para comparar a data e hora atuais com outra data:SELECT
NOW(),
TIMESTAMPDIFF(DAY, NOW(), '2021-03-31') AS Diff;
Resultado:
+---------------------+------+ | NOW() | Diff | +---------------------+------+ | 2021-05-30 09:29:01 | -60 | +---------------------+------+
Datas nulas
Se uma das datas for
null
, o resultado é null
:SELECT TIMESTAMPDIFF(
YEAR,
'2030-02-01',
NULL
)
AS Result;
Resultado:
+--------+ | Result | +--------+ | NULL | +--------+
Argumento ausente
Chamando
TIMESTAMPDIFF()
com o número errado de argumentos, ou sem passar nenhum argumento, resulta em um erro: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
E outro exemplo:
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