sql >> Database >  >> RDS >> MariaDB

Hoe TIMEDIFF() werkt in MariaDB

In MariaDB, TIMEDIFF() is een ingebouwde datum- en tijdfunctie die het verschil tussen twee tijdwaarden of datetime-waarden retourneert, uitgedrukt als een tijdwaarde.

Het is vergelijkbaar met de DATEDIFF() functie, behalve dat DATEDIFF() De retourwaarde wordt uitgedrukt in dagen.

TIMEDIFF() accepteert twee argumenten, die beide time- of datetime-expressies zijn. Vervolgens wordt de tweede keer van de eerste afgetrokken.

Syntaxis

De syntaxis gaat als volgt:

TIMEDIFF(expr1,expr2)

Het retourneert dan expr1 - expr2 .

Voorbeeld

Hier is een voorbeeld:

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

Resultaat:

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

Hier is het weer, maar met de tijdwaarden omgewisseld:

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

Resultaat:

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

Datum/tijd-waarden

Hier is een voorbeeld dat datetime-waarden gebruikt:

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

Resultaat:

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

Gemengde waardetypes

Terwijl TIMEDIFF() werkt op zowel tijd- als datetime-waarden, beide argumenten moeten van hetzelfde type zijn. Het mengen van typen resulteert in null .

Voorbeeld:

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

Resultaat:

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

Buiten bereik

Het bereik voor tijdwaarden is '-838:59:59.999999' naar '838:59:59.999999' . Als het resultaat buiten dat bereik valt, is de geretourneerde waarde de bovengrens van het relevante bereik en wordt er een waarschuwing geretourneerd.

Voorbeeld:

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

Resultaat:

+--------------------------------------------------------+
| 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)

Laten we eens kijken naar de waarschuwing:

SHOW WARNINGS;

Resultaat:

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

Huidige datum

Hier passeren we NOW() als tweede argument:

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

Resultaat:

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

Ongeldige argumenten

Bij het doorgeven van ongeldige argumenten, TIMEEDIFF() retourneert null :

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

Resultaat:

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

Ontbrekend argument

TIMEDIFF() . aanroepen het verkeerde aantal argumenten, of zonder het doorgeven van argumenten, resulteert in een fout:

SELECT TIMEDIFF();

Resultaat:

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

En:

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

Resultaat:

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

  1. Het minimaliseren van de impact van het verbreden van een IDENTITEIT-kolom - deel 2

  2. Omvang van tijdelijke tabellen in SQL Server

  3. Vervang dubbele spaties door een enkele spatie in T-SQL

  4. Mysql_*-functies vervangen door PDO en voorbereide instructies