sql >> Database >  >> RDS >> MariaDB

Hoe TIMESTAMPDIFF() werkt in MariaDB

In MariaDB, TIMESTAMPDIFF() is een ingebouwde datum- en tijdfunctie die het verschil tussen twee datum- of datetime-expressies retourneert.

Syntaxis

De syntaxis gaat als volgt:

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

Waar unit is een van de volgende waarden:

  • MICROSECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • MONTH
  • QUARTER
  • YEAR

De eenheden kunnen optioneel een prefix hebben van SQL_TSI_ .

TIMESTAMPDIFF() retourneert datetime_expr2 – datetime_expr1 .

De ene uitdrukking kan een datum zijn en de andere een datetime. Datumwaarden worden behandeld alsof ze een tijdsdeel hebben van 00:00:00 waar nodig.

Voorbeeld

Hier is een voorbeeld om te demonstreren:

SELECT TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01');

Resultaat:

+------------------------------------------------+
| TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01') |
+------------------------------------------------+
|                                             28 |
+------------------------------------------------+

Negatief resultaat

Het omwisselen van de datums levert een negatief resultaat op:

SELECT TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01');

Resultaat:

+------------------------------------------------+
| TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01') |
+------------------------------------------------+
|                                            -28 |
+------------------------------------------------+

Datum/tijd-waarden

Hier is een voorbeeld van het doorgeven van een datetime-waarde:

SELECT TIMESTAMPDIFF(
    HOUR, 
    '2030-02-01 00:00:00', 
    '2030-02-01 12:30:45'
    ) 
AS Result;

Resultaat:

+--------+
| Result |
+--------+
|     12 |
+--------+

Ik heb HOUR opgegeven , en dus negeert het het minuten- en secondengedeelte.

Gemengde soorten

Hier is een voorbeeld van het doorgeven van zowel een datum als een datetime-waarde:

SELECT TIMESTAMPDIFF(
    HOUR, 
    '2030-02-01', 
    '2030-02-01 12:30:45'
    ) 
AS Result;

Resultaat:

+--------+
| Result |
+--------+
|     12 |
+--------+

Zoals vermeld, worden datumwaarden behandeld als een tijdsdeel van 00:00:00 .

Een SQL_TSI_ toevoegen Voorvoegsel

Het apparaat kan een SQL_TSI_ . bevatten voorvoegsel indien nodig:

SELECT TIMESTAMPDIFF(
    SQL_TSI_YEAR, 
    '2030-02-01', 
    '2035-02-01'
    )
AS Result;

Resultaat:

+--------+
| Result |
+--------+
|      5 |
+--------+

Microseconden

Hier is een voorbeeld dat microseconden retourneert:

SELECT TIMESTAMPDIFF(
    MICROSECOND, 
    '2030-02-01 10:30:45.000000',
    '2030-02-01 10:30:45.123456'
    )
AS Result;

Resultaat:

+--------+
| Result |
+--------+
| 123456 |
+--------+

Hier is er een waarbij microseconden niet echt worden gespecificeerd in de datetime-waarden:

SELECT TIMESTAMPDIFF(
    MICROSECOND, 
    '2030-02-01 10:30:45',
    '2030-02-01 12:30:45'
    )
AS Result;

Resultaat:

+------------+
| Result     |
+------------+
| 7200000000 |
+------------+

Huidige datum

We kunnen NOW() doorgeven een van de datetime-argumenten om de huidige datum en tijd te vergelijken met een andere datum:

SELECT 
    NOW(),
    TIMESTAMPDIFF(DAY, NOW(), '2021-03-31') AS Diff;

Resultaat:

+---------------------+------+
| NOW()               | Diff |
+---------------------+------+
| 2021-05-30 09:29:01 |  -60 |
+---------------------+------+

Null-datums

Als een van de datums null is , het resultaat is null :

SELECT TIMESTAMPDIFF(
    YEAR, 
    '2030-02-01',
    NULL
    )
AS Result;

Resultaat:

+--------+
| Result |
+--------+
|   NULL |
+--------+

Ontbrekend argument

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

SELECT TIMESTAMPDIFF();

Resultaat:

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

En nog een voorbeeld:

SELECT TIMESTAMPDIFF('2020-12-09');

Resultaat:

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

  1. ProxySQL-native clustering met Kubernetes

  2. Inleiding tot SQL-groepering en totalen

  3. MySQL - UPDATE meerdere rijen met verschillende waarden in één query

  4. SQLiteException:onbekende database