Mysql
 sql >> Database >  >> RDS >> Mysql

TIMEDIFF() vs SUBTIME() in MySQL:qual è la differenza?

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.