sql >> Databáze >  >> RDS >> MariaDB

Jak funguje TIMESTAMPDIFF() v MariaDB

V MariaDB, TIMESTAMPDIFF() je vestavěná funkce data a času, která vrací rozdíl mezi dvěma výrazy data nebo datetime.

Syntaxe

Syntaxe vypadá takto:

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

Kde unit je jedna z následujících hodnot:

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

Jednotky mohou mít volitelně předponu SQL_TSI_ .

TIMESTAMPDIFF() vrátí datetime_expr2 – datetime_expr1 .

Jeden výraz může být datum a druhý datum a čas. Hodnoty data jsou považovány za hodnoty s časovou částí 00:00:00 kde je to nutné.

Příklad

Zde je příklad k demonstraci:

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

Výsledek:

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

Negativní výsledek

Změna dat poskytuje negativní výsledek:

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

Výsledek:

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

Hodnoty data a času

Zde je příklad předání hodnoty datetime:

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

Výsledek:

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

Zadal jsem HOUR , a tak ignoruje část minut a sekund.

Smíšené typy

Zde je příklad předání hodnoty data i data a času:

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

Výsledek:

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

Jak již bylo zmíněno, s hodnotami data se zachází jako s časovou částí 00:00:00 .

Přidání SQL_TSI_ Předpona

Jednotka může obsahovat SQL_TSI_ prefix, pokud je požadován:

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

Výsledek:

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

Mikrosekundy

Zde je příklad, který vrací mikrosekundy:

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

Výsledek:

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

Zde je jeden, kde mikrosekundy ve skutečnosti nejsou uvedeny v hodnotách datetime:

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

Výsledek:

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

Aktuální datum

Můžeme předat NOW() jeden z argumentů datetime, aby bylo možné porovnat aktuální datum a čas s jiným datem:

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

Výsledek:

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

Neplatná data

Pokud je jedno z dat null , výsledkem je null :

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

Výsledek:

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

Chybí argument

Volání TIMESTAMPDIFF() s nesprávným počtem argumentů nebo bez předání jakýchkoli argumentů vede k chybě:

SELECT TIMESTAMPDIFF();

Výsledek:

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

A další příklad:

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

Výsledek:

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. Nejlepší způsob, jak nainstalovat hstore na více schémat v databázi Postgres?

  2. chybí položka klauzule FROM pro tabulku Grupo cakephp

  3. Kdy *ne* použít připravené výpisy?

  4. Nelze odečíst data-časy, které nejsou naivní a využívající offset