sql >> Databasteknik >  >> RDS >> Mysql

TIMEDIFF() vs SUBTIME() i MySQL:Vad är skillnaden?

Du kanske har märkt att MySQL har en TIMEDIFF() funktion och en SUBTIME() fungera. Och du kanske har märkt att i många fall ger de båda samma resultat. Så du kanske undrar vad skillnaden är mellan dessa två funktioner?

Låt oss ta reda på det.

Syntax

Låt oss först titta på syntaxen för varje funktion.

SUBTIME()

SUBTIME(expr1,expr2)

Där expr1 är ett tid- eller datetime-uttryck och expr2 är ett tidsuttryck.

TIMEDIFF()

TIMEDIFF(expr1,expr2)

Där expr1 och expr2 är tid- eller datum-och-tid-uttryck, men båda måste vara av samma typ.

Skillnaden

Så här är skillnaden:

  • När du använder SUBTIME() , det andra argumentet måste vara ett tidsuttryck .
  • När du använder TIMEDIFF() det andra argumentet kan vara antingen tid eller datum-och-tid-uttryck, men i båda fallen måste det vara samma typ som det första uttrycket .

Exempel 1 – Båda argumenten är "tidsvärden"

Här är en jämförelse av båda funktionerna, där båda argumenten är tidsvärden.

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

Resultat:

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

Som förväntat returnerar båda funktionerna samma resultat.

Exempel 2 – Båda argumenten är "datetime"-värden

Här är en jämförelse av båda funktionerna, där båda argumenten är datetime-värden.

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';

Resultat:

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

I det här fallet, SUBTIME() returnerade ett nullvärde eftersom dess andra argument inte var ett tidsvärde (det var ett datetime-värde).

Exempel 3 – Första argumentet är "datumtid", andra är "tid"

Här är det första argumentet ett datetime-värde. Det andra argumentet är ett tidsvärde.

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';

Resultat:

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

I det här fallet, TIMEDIFF() returnerade ett nullvärde eftersom båda argumenten var av olika typ.

Exempel 4 – Första argumentet är 'tid', andra är 'datumtid'

Och här byter vi om det. Det första argumentet är ett tidsvärde. Det andra argumentet är ett datetime-värde.

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';

Resultat:

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

I det här fallet:

  • TIMEDIFF() returnerade ett nullvärde eftersom båda argumenten var av olika typ.
    SUBTIME() returnerade ett nullvärde eftersom det bara accepterar ett tidsvärde för sitt andra argument.

  1. Hur tar jag reda på om en oracle-databas är inställd på autocommit?

  2. MySQL-servern får slut på minne eller startar inte

  3. T-SQL-buggar, fallgropar och bästa praxis – går med

  4. PHP infogar flera kryssrutor OCH textboxarrayer i MySQL Database