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 | +----------+----------+