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

MySQL DATEDIFF() vs TIMEDIFF():Jaka jest różnica?

Dwie funkcje daty zawarte w MySQL to DATEDIFF() i TIMEDIFF() .

Obie funkcje działają podobnie, ale z pewnymi znaczącymi różnicami.

Poniższa tabela podsumowuje różnicę między tymi dwiema funkcjami:

DATEDIFF() TIMEDIFF()
Wynik jest wyrażony jako wartość w dniach. Wynik jest wyrażony jako wartość czasu.
Porównuje tylko wartość daty swoich argumentów. Porównuje wartość czasu swoich argumentów.
Akceptuje wyrażenia daty lub daty i czasu. Akceptuje wyrażenia czasu lub daty i czasu.
Oba argumenty mogą być różnego typu (data lub data i godzina). Oba argumenty muszą być tego samego typu (czas lub data i godzina).

Przykład 1 – podstawowa różnica

Oto przykład, który pokazuje podstawową różnicę między tymi funkcjami.

SET @date1 = '2010-10-11 00:00:00', @date2 = '2010-10-10 00:00:00';
SELECT 
  DATEDIFF(@date1, @date2) AS 'DATEDIFF',
  TIMEDIFF(@date1, @date2) AS 'TIMEDIFF';

Wynik:

+----------+----------+
| DATEDIFF | TIMEDIFF |
+----------+----------+
|        1 | 24:00:00 |
+----------+----------+

Widzimy więc, że DATEDIFF() zwrócono 1 , co oznacza „1 dzień” i TIMEDIFF() zwrócono 24:00:00 co jest reprezentacją czasu dokładnie 1 dnia.

Przykład 2 – Określanie wartości czasu

Zobaczmy, co się stanie, jeśli zwiększymy wartość czasu jednej ze zmiennych.

SET @date1 = '2010-10-11 12:15:35', @date2 = '2010-10-10 00:00:00';
SELECT 
  DATEDIFF(@date1, @date2) AS 'DATEDIFF',
  TIMEDIFF(@date1, @date2) AS 'TIMEDIFF';

Wynik:

+----------+----------+
| DATEDIFF | TIMEDIFF |
+----------+----------+
|        1 | 36:15:35 |
+----------+----------+

Więc DATEDIFF() zwraca ten sam wynik, co w poprzednim przykładzie. Dzieje się tak, ponieważ porównuje tylko wartości dat (ignoruje wszelkie wartości czasu).

TIMEDIFF() Z drugiej strony funkcja porównuje czas i dlatego zwraca dokładniejszy wynik. Pokazuje nam, że między dwiema wartościami daty i czasu jest 36 godzin, 15 minut i 35 sekund.

Przykład 3 – Niewłaściwe typy argumentów

Oto przykład tego, co się dzieje, gdy przekazujesz nieprawidłowe typy argumentów do każdej funkcji.

SET @date1 = '2010-10-11', @date2 = '2010-10-10', @time1 = '12:15:35', @time2 = '00:00:00';
SELECT 
  DATEDIFF(@date1, @date2) AS 'DATEDIFF Date',
  DATEDIFF(@time1, @time2) AS 'DATEDIFF Time',
  TIMEDIFF(@date1, @date2) AS 'TIMEDIFF Date',
  TIMEDIFF(@time1, @time2) AS 'TIMEDIFF Time';

Wynik:

+---------------+---------------+---------------+---------------+
| DATEDIFF Date | DATEDIFF Time | TIMEDIFF Date | TIMEDIFF Time |
+---------------+---------------+---------------+---------------+
|             1 |          NULL | 00:00:00      | 12:15:35      |
+---------------+---------------+---------------+---------------+

Pierwszy i ostatni wynik są w porządku, ponieważ przekazano prawidłowe typy argumentów. Jednak dwa środkowe wyniki miały przekazany niewłaściwy typ danych i dlatego nie można było obliczyć prawidłowego wyniku.

Przykład 4 – Mieszane typy argumentów

Oto, co się stanie, jeśli do każdej funkcji podasz dwa różne typy danych.

SET @thedate = '2010-10-11', @thetime = '12:15:35', @thedatetime = '2010-10-10 00:00:00';
SELECT 
  DATEDIFF(@thedate, @thedatetime) AS 'DATEDIFF',
  TIMEDIFF(@thetime, @thedatetime) AS 'TIMEDIFF';

Wynik:

+----------+----------+
| DATEDIFF | TIMEDIFF |
+----------+----------+
|        1 | NULL     |
+----------+----------+

Widzimy więc, że DATEDIFF() dobrze radzi sobie z mieszanymi typami danych (o ile są to data lub data i godzina).

Jednak TIMEDIFF() wymaga, aby oba argumenty były tego samego typu, więc otrzymujemy NULL , mimo że oba argumenty są typu obsługiwanego przez funkcję (czas oraz data i godzina).

Możemy potwierdzić, że oba typy są w rzeczywistości obsługiwane przez tę funkcję na następującym przykładzie:

SET @thetime1 = '12:15:35', @thetime2 = '10:15:35', @thedatetime1 = '2010-10-12 00:00:00', @thedatetime2 = '2010-10-10 00:00:00';
SELECT 
  TIMEDIFF(@thetime1, @thetime2) AS 'time',
  TIMEDIFF(@thedatetime1, @thedatetime2) AS 'datetime';

Wynik:

+----------+----------+
| time     | datetime |
+----------+----------+
| 02:00:00 | 48:00:00 |
+----------+----------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak najlepiej uzyskać czyjąś „ranking” z tabeli wyników za pomocą php i mysql bez zapętlania

  2. MySQL Data - Najlepszy sposób na zaimplementowanie stronicowania?

  3. Kroki instalacji MySQL8 na CentOS

  4. Jak obliczyć sumę bieżącą w MySQL

  5. Jak liczyć elementy na liście oddzielonej przecinkami MySQL