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

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

Dvě funkce data zahrnuté v MySQL jsou DATEDIFF() a TIMEDIFF() .

Obě funkce dělají podobnou věc, ale s určitými smysluplnými rozdíly.

Následující tabulka shrnuje rozdíl mezi těmito dvěma funkcemi:

DATEDIFF() TIMEDIFF()
Výsledek je vyjádřen jako hodnota ve dnech. Výsledek je vyjádřen jako časová hodnota.
Porovnává pouze hodnotu data svých argumentů. Porovná časovou hodnotu svých argumentů.
Přijímá výrazy data nebo data a času. Přijímá výrazy času nebo data a času.
Oba argumenty mohou být různého typu (datum nebo datum a čas). Oba argumenty musí být stejného typu (buď čas nebo datum a čas).

Příklad 1 – Základní rozdíl

Zde je příklad, který ukazuje základní rozdíl mezi těmito funkcemi.

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

Výsledek:

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

Takže vidíme, že DATEDIFF() vrátil 1 , což znamená „1 den“ a TIMEDIFF() vráceno 24:00:00 což je časové vyjádření přesně 1 dne.

Příklad 2 – Určení časové hodnoty

Podívejme se, co se stane, když zvýšíme časovou hodnotu jedné z proměnných.

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

Výsledek:

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

Takže DATEDIFF() vrátí stejný výsledek jako v předchozím příkladu. Je to proto, že porovnává pouze hodnoty data (ignoruje jakékoli časové hodnoty).

TIMEDIFF() funkce na druhou stranu porovnává čas, a proto vrací přesnější výsledek. Ukazuje nám, že mezi dvěma hodnotami data a času je 36 hodin, 15 minut a 35 sekund.

Příklad 3 – Nesprávné typy argumentů

Zde je příklad toho, co se stane, když každé funkci předáte nesprávné typy argumentů.

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

Výsledek:

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

První a poslední výsledky jsou v pořádku, protože byly předány správné typy argumentů. U prostředních dvou výsledků byl však předán nesprávný datový typ, a proto nebylo možné vypočítat správný výsledek.

Příklad 4 – Smíšené typy argumentů

Zde je to, co se stane, když každé funkci poskytnete dva různé datové typy.

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

Výsledek:

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

Takže vidíme, že DATEDIFF() dobře zvládá smíšené datové typy (pokud se jedná o datum nebo datum a čas).

Nicméně TIMEDIFF() vyžaduje, aby oba argumenty byly stejného typu, takže dostaneme NULL , i když oba argumenty jsou typu, který funkce podporuje (čas a datum a čas).

Že jsou oba typy touto funkcí ve skutečnosti podporovány, můžeme potvrdit na následujícím příkladu:

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

Výsledek:

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

  1. Zařazení do fronty ve zprávách OneWay WCF pomocí Windows Service a SQL Server

  2. Povolte SQL Server Agent prostřednictvím SSMS

  3. Skupinově maximum

  4. balíček selhává – nelze najít klientskou knihovnu PostgreSQL (libpq)