Potresti aver notato che MySQL ha un TIMEDIFF()
funzione e un SUBTIME()
funzione. E potresti aver notato che in molti casi entrambi restituiscono lo stesso risultato. Quindi ti starai chiedendo qual è la differenza tra queste due funzioni?
Scopriamolo.
Sintassi
Per prima cosa diamo un'occhiata alla sintassi di ciascuna funzione.
SOTTOTEMPO()
SUBTIME(expr1,expr2)
Dove expr1
è un'espressione ora o data/ora e expr2
è un'espressione del tempo.
TIMEDIFF()
TIMEDIFF(expr1,expr2)
Dove expr1
e expr2
sono espressioni di ora o data e ora, ma entrambe devono essere dello stesso tipo.
La differenza
Quindi ecco la differenza:
- Quando si utilizza
SUBTIME()
, il secondo argomento deve essere un'espressione temporale . - Quando si utilizza
TIMEDIFF()
il secondo argomento può essere un'espressione di ora o di data e ora, ma in entrambi i casi deve essere dello stesso tipo della prima espressione .
Esempio 1:entrambi gli argomenti sono valori di "tempo"
Ecco un confronto di entrambe le funzioni, dove entrambi gli argomenti sono valori temporali.
SELECT TIMEDIFF('11:35:25', '10:35:25') AS 'TIMEDIFF', SUBTIME('11:35:25', '10:35:25') AS 'SUBTIME';
Risultato:
+----------+----------+ | TIMEDIFF | SUBTIME | +----------+----------+ | 01:00:00 | 01:00:00 | +----------+----------+
Come previsto, entrambe le funzioni restituiscono lo stesso risultato.
Esempio 2:entrambi gli argomenti sono valori "datetime"
Ecco un confronto di entrambe le funzioni, in cui entrambi gli argomenti sono valori datetime.
SELECT TIMEDIFF('2021-02-01 10:35:25', '2021-01-01 10:35:25') AS 'TIMEDIFF', SUBTIME('2021-02-01 10:35:25', '2021-01-01 10:35:25') AS 'SUBTIME';
Risultato:
+-----------+---------+ | TIMEDIFF | SUBTIME | +-----------+---------+ | 744:00:00 | NULL | +-----------+---------+
In questo caso, SUBTIME()
ha restituito un valore nullo perché il suo secondo argomento non era un valore temporale (era un valore datetime).
Esempio 3:il primo argomento è "datetime", il secondo è "time"
Qui, il primo argomento è un valore datetime. Il secondo argomento è un valore temporale.
SELECT TIMEDIFF('2021-02-01 10:35:25', '09:35:25') AS 'TIMEDIFF', SUBTIME('2021-02-01 10:35:25', '09:35:25') AS 'SUBTIME';
Risultato:
+----------+---------------------+ | TIMEDIFF | SUBTIME | +----------+---------------------+ | NULL | 2021-02-01 01:00:00 | +----------+---------------------+
In questo caso, TIMEDIFF()
ha restituito un valore nullo perché entrambi gli argomenti erano di tipo diverso.
Esempio 4:il primo argomento è "ora", il secondo è "data e ora"
E qui, lo scambiamo. Il primo argomento è un valore temporale. Il secondo argomento è un valore datetime.
SELECT TIMEDIFF('09:35:25', '2021-01-01 10:35:25') AS 'TIMEDIFF', SUBTIME('09:35:25', '2021-01-01 10:35:25') AS 'SUBTIME';
Risultato:
+----------+---------+ | TIMEDIFF | SUBTIME | +----------+---------+ | NULL | NULL | +----------+---------+
In questo caso:
TIMEDIFF()
ha restituito un valore null perché entrambi gli argomenti erano di tipo diverso.SUBTIME()
ha restituito un valore nullo perché accetta solo un valore temporale per il suo secondo argomento.