sql >> Database >  >> RDS >> Mysql

TIMEDIFF() vs SUBTIME() in MySQL:wat is het verschil?

Het is je misschien opgevallen dat MySQL een TIMEDIFF() . heeft functie en een SUBTIME() functie. En je hebt misschien gemerkt dat ze in veel gevallen allebei hetzelfde resultaat opleveren. Dus je vraagt ​​je misschien af ​​wat het verschil is tussen deze twee functies?

Laten we het uitzoeken.

Syntaxis

Laten we eerst eens kijken naar de syntaxis van elke functie.

SUBTIME()

SUBTIME(expr1,expr2)

Waar expr1 is een tijd- of datetime-expressie, en expr2 is een tijduitdrukking.

TIMEDIFF()

TIMEDIFF(expr1,expr2)

Waar expr1 en expr2 zijn tijd- of datum-en-tijd-expressies, maar beide moeten van hetzelfde type zijn.

Het verschil

Dus hier is het verschil:

  • Bij gebruik van SUBTIME() , het tweede argument moet een tijduitdrukking zijn .
  • Bij gebruik van TIMEDIFF() het tweede argument kan een tijd- of datum-en-tijd-expressie zijn, maar in beide gevallen het moet van hetzelfde type zijn als de eerste expressie .

Voorbeeld 1 – Beide argumenten zijn ‘tijd’-waarden

Hier is een vergelijking van beide functies, waarbij beide argumenten tijdwaarden zijn.

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

Resultaat:

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

Zoals verwacht, geven beide functies hetzelfde resultaat.

Voorbeeld 2 – Beide argumenten zijn ‘datetime’-waarden

Hier is een vergelijking van beide functies, waarbij beide argumenten datetime-waarden zijn.

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

Resultaat:

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

In dit geval SUBTIME() heeft een null-waarde geretourneerd omdat het tweede argument geen tijdwaarde was (het was een datetime-waarde).

Voorbeeld 3 – Eerste argument is 'datetime', tweede is 'time'

Hier is het eerste argument een datetime-waarde. Het tweede argument is een tijdswaarde.

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

Resultaat:

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

In dit geval TIMEDIFF() heeft een null-waarde geretourneerd omdat beide argumenten van een ander type waren.

Voorbeeld 4 – Eerste argument is 'tijd', tweede is 'datetime'

En hier wisselen we het om. Het eerste argument is een tijdswaarde. Het tweede argument is een datetime-waarde.

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

Resultaat:

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

In dit geval:

  • TIMEDIFF() heeft een null-waarde geretourneerd omdat beide argumenten van een ander type waren.
    SUBTIME() heeft een null-waarde geretourneerd omdat het alleen een tijdwaarde accepteert voor zijn tweede argument.

  1. Hoe de bovenste N rijen per groep te selecteren in MySQL

  2. Wat is het beste hulpmiddel om twee SQL Server-databases (schema en gegevens) te vergelijken?

  3. Hoe twee rijen uit dezelfde tabel te vergelijken

  4. Vul een vervolgkeuzelijst in vanuit een mySQL-tabel in PHP