MariaDB
 sql >> Database >  >> RDS >> MariaDB

Come funziona TIMEDIFF() in MariaDB

In MariaDB, TIMEDIFF() è una funzione di data e ora incorporata che restituisce la differenza tra due valori temporali o valori datetime, espressa come valore temporale.

È simile a DATEDIFF() funzione, eccetto che DATEDIFF() Il valore di ritorno di 's è espresso in giorni.

TIMEDIFF() accetta due argomenti, entrambi espressioni di ora o data e ora. Quindi sottrae la seconda volta dalla prima.

Sintassi

La sintassi è questa:

TIMEDIFF(expr1,expr2)

Quindi restituisce expr1 - expr2 .

Esempio

Ecco un esempio:

SELECT TIMEDIFF('10:30:17', '1:10:10');

Risultato:

+---------------------------------+
| TIMEDIFF('10:30:17', '1:10:10') |
+---------------------------------+
| 09:20:07                        |
+---------------------------------+

Eccolo di nuovo, ma con i valori temporali scambiati:

SELECT TIMEDIFF('1:10:10', '10:30:17');

Risultato:

+---------------------------------+
| TIMEDIFF('1:10:10', '10:30:17') |
+---------------------------------+
| -09:20:07                       |
+---------------------------------+

Valori di data e ora

Ecco un esempio che utilizza i valori datetime:

SELECT TIMEDIFF('2030-01-25 00:00:00', '2030-01-20 23:59:59');

Risultato:

+--------------------------------------------------------+
| TIMEDIFF('2030-01-25 00:00:00', '2030-01-20 23:59:59') |
+--------------------------------------------------------+
| 96:00:01                                               |
+--------------------------------------------------------+

Tipi di valori misti

Mentre TIMEDIFF() funziona su entrambi i valori time e datetime, entrambi gli argomenti devono essere dello stesso tipo. La combinazione di tipi risulta null .

Esempio:

SELECT TIMEDIFF('2030-01-25 00:00:00', '23:59:59');

Risultato:

+---------------------------------------------+
| TIMEDIFF('2030-01-25 00:00:00', '23:59:59') |
+---------------------------------------------+
| NULL                                        |
+---------------------------------------------+

Fuori portata

L'intervallo per i valori temporali è '-838:59:59.999999' a '838:59:59.999999' . Se il risultato è al di fuori di tale intervallo, il valore restituito è il limite superiore dell'intervallo pertinente e viene restituito un avviso.

Esempio:

SELECT TIMEDIFF('2040-01-25 00:00:00', '2030-01-25 23:59:59');

Risultato:

+--------------------------------------------------------+
| TIMEDIFF('2040-01-25 00:00:00', '2030-01-25 23:59:59') |
+--------------------------------------------------------+
| 838:59:59                                              |
+--------------------------------------------------------+
1 row in set, 1 warning (0.003 sec)

Diamo un'occhiata all'avviso:

SHOW WARNINGS;

Risultato:

+---------+------+-----------------------------------------------+
| Level   | Code | Message                                       |
+---------+------+-----------------------------------------------+
| Warning | 1292 | Truncated incorrect time value: '87624:00:01' |
+---------+------+-----------------------------------------------+

Data attuale

Qui passiamo NOW() come secondo argomento:

SELECT 
    NOW(),
    TIMEDIFF('2021-05-27 10:00:00', NOW());

Risultato:

+---------------------+----------------------------------------+
| NOW()               | TIMEDIFF('2021-05-27 10:00:00', NOW()) |
+---------------------+----------------------------------------+
| 2021-05-27 14:29:38 | -04:29:38                              |
+---------------------+----------------------------------------+

Argomenti non validi

Quando vengono passati argomenti non validi, TIMEEDIFF() restituisce null :

SELECT TIMEDIFF('Homer', 'Simpson');

Risultato:

+------------------------------+
| TIMEDIFF('Homer', 'Simpson') |
+------------------------------+
| NULL                         |
+------------------------------+

Argomento mancante

Chiamando TIMEDIFF() il numero errato di argomenti, o senza passare alcun argomento, genera un errore:

SELECT TIMEDIFF();

Risultato:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TIMEDIFF'

E:

SELECT TIMEDIFF('2030-05-21');

Risultato:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TIMEDIFF'