In MariaDB, TIMESTAMPDIFF()
è una funzione di data e ora incorporata che restituisce la differenza tra due espressioni di data o data e ora.
Sintassi
La sintassi è questa:
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
Dove unit
è uno dei seguenti valori:
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
Le unità possono opzionalmente avere un prefisso SQL_TSI_
.
TIMESTAMPDIFF()
restituisce datetime_expr2
– datetime_expr1
.
Un'espressione può essere una data e l'altra un datetime. I valori di data vengono trattati come se avessero una parte temporale di 00:00:00
ove necessario.
Esempio
Ecco un esempio da dimostrare:
SELECT TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01');
Risultato:
+------------------------------------------------+ | TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01') | +------------------------------------------------+ | 28 | +------------------------------------------------+
Risultato negativo
Cambiare le date fornisce un risultato negativo:
SELECT TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01');
Risultato:
+------------------------------------------------+ | TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01') | +------------------------------------------------+ | -28 | +------------------------------------------------+
Valori di data e ora
Ecco un esempio di passaggio di un valore datetime:
SELECT TIMESTAMPDIFF(
HOUR,
'2030-02-01 00:00:00',
'2030-02-01 12:30:45'
)
AS Result;
Risultato:
+--------+ | Result | +--------+ | 12 | +--------+
Ho specificato HOUR
, quindi ignora la parte dei minuti e dei secondi.
Tipi misti
Ecco un esempio di passaggio di una data e di un valore datetime:
SELECT TIMESTAMPDIFF(
HOUR,
'2030-02-01',
'2030-02-01 12:30:45'
)
AS Result;
Risultato:
+--------+ | Result | +--------+ | 12 | +--------+
Come accennato, i valori di data vengono trattati come se avessero una parte temporale di 00:00:00
.
Aggiunta di un SQL_TSI_
Prefisso
L'unità può includere un SQL_TSI_
prefisso se richiesto:
SELECT TIMESTAMPDIFF(
SQL_TSI_YEAR,
'2030-02-01',
'2035-02-01'
)
AS Result;
Risultato:
+--------+ | Result | +--------+ | 5 | +--------+
Microsecondi
Ecco un esempio che restituisce microsecondi:
SELECT TIMESTAMPDIFF(
MICROSECOND,
'2030-02-01 10:30:45.000000',
'2030-02-01 10:30:45.123456'
)
AS Result;
Risultato:
+--------+ | Result | +--------+ | 123456 | +--------+
Eccone uno in cui i microsecondi non sono effettivamente specificati nei valori datetime:
SELECT TIMESTAMPDIFF(
MICROSECOND,
'2030-02-01 10:30:45',
'2030-02-01 12:30:45'
)
AS Result;
Risultato:
+------------+ | Result | +------------+ | 7200000000 | +------------+
Data attuale
Possiamo passare NOW()
uno degli argomenti datetime per confrontare la data e l'ora correnti con un'altra data:
SELECT
NOW(),
TIMESTAMPDIFF(DAY, NOW(), '2021-03-31') AS Diff;
Risultato:
+---------------------+------+ | NOW() | Diff | +---------------------+------+ | 2021-05-30 09:29:01 | -60 | +---------------------+------+
Date nulle
Se una delle date è null
, il risultato è null
:
SELECT TIMESTAMPDIFF(
YEAR,
'2030-02-01',
NULL
)
AS Result;
Risultato:
+--------+ | Result | +--------+ | NULL | +--------+
Argomento mancante
Chiamando TIMESTAMPDIFF()
con il numero errato di argomenti, o senza passare alcun argomento, si verifica un errore:
SELECT TIMESTAMPDIFF();
Risultato:
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 un altro esempio:
SELECT TIMESTAMPDIFF('2020-12-09');
Risultato:
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