Mysql
 sql >> Baza danych >  >> RDS >> Mysql

TIMEDIFF() vs SUBTIME() w MySQL:jaka jest różnica?

Być może zauważyłeś, że MySQL ma funkcję TIMEDIFF() funkcja i SUBTIME() funkcjonować. Być może zauważyłeś, że w wielu przypadkach obie zwracają ten sam wynik. Być może zastanawiasz się, jaka jest różnica między tymi dwiema funkcjami?

Dowiedzmy się.

Składnia

Najpierw spójrzmy na składnię każdej funkcji.

SUBTIME()

SUBTIME(expr1,expr2)

Gdzie expr1 jest wyrażeniem czasu lub daty i godziny, a expr2 jest wyrażeniem czasu.

RÓŻNICA CZASOWA()

TIMEDIFF(expr1,expr2)

Gdzie expr1 i expr2 są wyrażeniami czasu lub daty i czasu, ale oba muszą być tego samego typu.

Różnica

Oto różnica:

  • Gdy używasz SUBTIME() , drugi argument musi być wyrażeniem czasowym .
  • Gdy używasz TIMEDIFF() drugi argument może być wyrażeniem godziny lub daty i godziny, ale w każdym przypadku musi być tego samego typu co pierwsze wyrażenie .

Przykład 1 – Oba argumenty są wartościami „czasu”

Oto porównanie obu funkcji, gdzie oba argumenty są wartościami czasu.

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

Wynik:

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

Zgodnie z oczekiwaniami obie funkcje zwracają ten sam wynik.

Przykład 2 – Oba argumenty są wartościami „data-godzina”

Oto porównanie obu funkcji, gdzie oba argumenty są wartościami daty i godziny.

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

Wynik:

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

W tym przypadku SUBTIME() zwrócił wartość null, ponieważ jej drugi argument nie był wartością czasu (była wartością daty i czasu).

Przykład 3 – Pierwszy argument to „data-godzina”, drugi to „godzina”

Tutaj pierwszym argumentem jest wartość daty i godziny. Drugi argument to wartość czasu.

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

Wynik:

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

W tym przypadku TIMEDIFF() zwrócił wartość null, ponieważ oba argumenty były innego typu.

Przykład 4 – Pierwszy argument to „czas”, drugi to „data-godzina”

A tutaj zamieniamy to. Pierwszy argument to wartość czasu. Drugi argument to wartość daty i godziny.

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

Wynik:

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

W takim przypadku:

  • TIMEDIFF() zwrócił wartość null, ponieważ oba argumenty były innego typu.
    SUBTIME() zwrócił wartość null, ponieważ jako drugi argument przyjmuje tylko wartość czasu.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Inner Join – Jak połączyć 3 tabele w SQL i MySQL

  2. Stosowanie PDO na zajęciach

  3. Błąd przygotowanej instrukcji mysql:MySQLSyntaxErrorException

  4. ZNAJDŹ_IN_SET() kontra IN()

  5. Generowanie drzewa opartego na głębokości z danych hierarchicznych w MySQL (bez CTE)