sql >> Databáze >  >> RDS >> Mysql

TIMEDIFF() vs SUBTIME() v MySQL:Jaký je rozdíl?

Možná jste si všimli, že MySQL má TIMEDIFF() funkce a SUBTIME() funkce. A možná jste si všimli, že v mnoha případech oba vrátí stejný výsledek. Možná se tedy ptáte, jaký je rozdíl mezi těmito dvěma funkcemi?

Pojďme to zjistit.

Syntaxe

Nejprve se podívejme na syntaxi každé funkce.

SUBTIME()

SUBTIME(expr1,expr2)

Kde expr1 je výraz čas nebo datum a čas a expr2 je časový výraz.

TIMEDIFF()

TIMEDIFF(expr1,expr2)

Kde expr1 a expr2 jsou výrazy času nebo data a času, ale oba musí být stejného typu.

Rozdíl

Takže tady je rozdíl:

  • Při použití SUBTIME() , druhý argument musí být časový výraz .
  • Při použití TIMEDIFF() druhým argumentem může být výraz čas nebo datum a čas, ale v obou případech musí být stejného typu jako první výraz .

Příklad 1 – Oba argumenty jsou „časové“ hodnoty

Zde je srovnání obou funkcí, kde oba argumenty jsou časové hodnoty.

SELECT 
    TIMEDIFF('11:35:25', '10:35:25') AS 'TIMEDIFF',
    SUBTIME('11:35:25', '10:35:25') AS 'SUBTIME';

Výsledek:

+----------+----------+
| TIMEDIFF | SUBTIME  |
+----------+----------+
| 01:00:00 | 01:00:00 |
+----------+----------+

Podle očekávání obě funkce vrátí stejný výsledek.

Příklad 2 – Oba argumenty jsou hodnoty „datetime“

Zde je srovnání obou funkcí, kde oba argumenty jsou hodnoty data a času.

SELECT 
    TIMEDIFF('2021-02-01 10:35:25', '2021-01-01 10:35:25') AS 'TIMEDIFF',
    SUBTIME('2021-02-01 10:35:25', '2021-01-01 10:35:25') AS 'SUBTIME';

Výsledek:

+-----------+---------+
| TIMEDIFF  | SUBTIME |
+-----------+---------+
| 744:00:00 | NULL    |
+-----------+---------+

V tomto případě SUBTIME() vrátil hodnotu null, protože jeho druhý argument nebyl hodnotou času (byla to hodnota datetime).

Příklad 3 – První argument je „datetime“, druhý je „čas“

Zde je prvním argumentem hodnota datetime. Druhým argumentem je časová hodnota.

SELECT 
    TIMEDIFF('2021-02-01 10:35:25', '09:35:25') AS 'TIMEDIFF',
    SUBTIME('2021-02-01 10:35:25', '09:35:25') AS 'SUBTIME';

Výsledek:

+----------+---------------------+
| TIMEDIFF | SUBTIME             |
+----------+---------------------+
| NULL     | 2021-02-01 01:00:00 |
+----------+---------------------+

V tomto případě TIMEDIFF() vrátil hodnotu null, protože oba argumenty byly jiného typu.

Příklad 4 – První argument je „čas“, druhý je „datetime“

A tady si to vyměníme. První argument je časová hodnota. Druhým argumentem je hodnota datetime.

SELECT 
    TIMEDIFF('09:35:25', '2021-01-01 10:35:25') AS 'TIMEDIFF',
    SUBTIME('09:35:25', '2021-01-01 10:35:25') AS 'SUBTIME';

Výsledek:

+----------+---------+
| TIMEDIFF | SUBTIME |
+----------+---------+
| NULL     | NULL    |
+----------+---------+

V tomto případě:

  • TIMEDIFF() vrátila hodnotu null, protože oba argumenty byly jiného typu.
    SUBTIME() vrátil hodnotu null, protože akceptuje pouze časovou hodnotu pro svůj druhý argument.

  1. Jak najít maximální hodnotu číselného sloupce v SQL

  2. Jak funguje SESSION_CONTEXT() na serveru SQL Server

  3. Funkce SUM() na serveru SQL Server

  4. Před číslo v PostgreSQL přidejte znaménko plus/mínus