sql >> Databasteknik >  >> RDS >> MariaDB

Hur TIMESTAMPDIFF() fungerar i MariaDB

I MariaDB, TIMESTAMPDIFF() är en inbyggd datum- och tidsfunktion som returnerar skillnaden mellan två datum- eller datetime-uttryck.

Syntax

Syntaxen ser ut så här:

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

Där unit är ett av följande värden:

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

Enheterna kan valfritt ha prefixet SQL_TSI_ .

TIMESTAMPDIFF() returnerar datetime_expr2 – datetime_expr1 .

Ett uttryck kan vara ett datum och det andra ett datum och tid. Datumvärden behandlas som att de har en tidsdel av 00:00:00 där det behövs.

Exempel

Här är ett exempel att visa:

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

Resultat:

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

Negativt resultat

Att byta datum ger ett negativt resultat:

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

Resultat:

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

Datetime-värden

Här är ett exempel på hur du skickar ett datetime-värde:

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

Resultat:

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

Jag angav HOUR , och därför ignorerar den minuter och sekunder.

Blandade typer

Här är ett exempel på hur du skickar både ett datum och ett datetime-värde:

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

Resultat:

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

Som nämnts behandlas datumvärden som att ha en tidsdel av 00:00:00 .

Lägga till en SQL_TSI_ Prefix

Enheten kan innehålla en SQL_TSI_ prefix vid behov:

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

Resultat:

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

Mikrosekunder

Här är ett exempel som returnerar mikrosekunder:

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

Resultat:

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

Här är en där mikrosekunder faktiskt inte anges i datetime-värdena:

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

Resultat:

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

Aktuellt datum

Vi kan skicka NOW() ett av datetime-argumenten för att jämföra aktuellt datum och tid med ett annat datum:

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

Resultat:

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

Nulldatum

Om ett av datumen är null , resultatet är null :

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

Resultat:

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

Argument saknas

Anropar TIMESTAMPDIFF() med fel antal argument, eller utan att skicka några argument, resulterar i ett fel:

SELECT TIMESTAMPDIFF();

Resultat:

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

Och ett annat exempel:

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

Resultat:

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. En översikt över ProxySQL-klustring i ClusterControl

  2. importera en CSV till phpmyadmin

  3. Mysql infoga i 2 tabeller

  4. gå med i två olika tabellers kolumn sqlite3