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

Sådan fungerer TIMESTAMPDIFF() i MariaDB

I MariaDB, TIMESTAMPDIFF() er en indbygget dato- og klokkeslætsfunktion, der returnerer forskellen mellem to dato- eller datotidsudtryk.

Syntaks

Syntaksen ser sådan ud:

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

Hvor unit er en af ​​følgende værdier:

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

Enhederne kan valgfrit have præfikset SQL_TSI_ .

TIMESTAMPDIFF() returnerer datetime_expr2 – datetime_expr1 .

Det ene udtryk kan være en dato og det andet et datetime. Datoværdier behandles som at have en tidsdel af 00:00:00 hvor det er nødvendigt.

Eksempel

Her er et eksempel til demonstration:

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

Resultat:

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

Negativt resultat

Ændring af datoerne giver et negativt resultat:

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

Resultat:

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

Dato-tidsværdier

Her er et eksempel på videregivelse af en datetime-værdi:

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

Resultat:

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

Jeg har angivet HOUR , og så ignorerer den minutter og sekunder.

Blandede typer

Her er et eksempel på at overføre både en dato og en datetime-værdi:

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

Resultat:

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

Som nævnt behandles datoværdier som at have en tidsdel af 00:00:00 .

Tilføjelse af en SQL_TSI_ Præfiks

Enheden kan inkludere en SQL_TSI_ præfiks om nødvendigt:

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

Resultat:

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

Mikrosekunder

Her er et eksempel, der returnerer mikrosekunder:

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

Resultat:

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

Her er en, hvor mikrosekunder faktisk ikke er angivet i datetime-værdierne:

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

Resultat:

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

Aktuel dato

Vi kan sende NOW() et af datetime-argumenterne for at sammenligne den aktuelle dato og tid med en anden dato:

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

Resultat:

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

Nulledatoer

Hvis en af ​​datoerne er null , resultatet er null :

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

Resultat:

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

Manglende argument

Kalder TIMESTAMPDIFF() med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:

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

Og endnu et eksempel:

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. Sådan eksporteres forespørgselsresultat til Excel i Oracle SQL Developer?

  2. Hvad er forskellen mellem backtick og firkantet parentes i SQL-sætninger?

  3. Hvordan synkroniseres Mysql DB igen, hvis Master og slave har forskellige databaser i tilfælde af Mysql-replikering?

  4. Retter ORA-65096-fejl ved oprettelse af automatiserede test i Django ved hjælp af Oracle