Skip to content

Archives

  • 2022 január
  • 2021 december
  • 2021 november
  • 2021 október
  • 2021 szeptember

Categories

  • Nincs kategória
Trend RepositoryArticles and guides
Articles

Database.Guide

On január 27, 2022 by admin

Ez a cikk két MySQL függvény közötti különbséget vizsgálja; DATEDIFF() és TIMESTAMPDIFF().

Mindkét függvény két dátum és/vagy időpont közötti különbséget ad vissza, de az eredmény a két függvény között eltérő.

A következő táblázat összefoglalja a két függvény közötti különbséget:

DATEDIFF() TIMESTAMPDIFF()
2 argumentumot igényel. 3 argumentumot igényel.
A 2. argumentumot kivonja az 1. argumentumból (expr1 – expr2). A 2. argumentumot kivonja a 3. argumentumból (expr2 – expr1).
Az eredményt napokban kifejezett értékként fejezi ki. Az eredményt az első argumentum által megadott egységben fejezi ki.
Csak az argumentumok dátumértékét tudja összehasonlítani. Az argumentumok dátum- és időértékét tudja összehasonlítani.
  • Példa 1 – Alapművelet
  • 2. példa – Az egység megváltoztatása
  • Példa 3 – Precizitás
  • 4. példa – Rossz argumentumtípusok
  • 5. példa – Vegyes argumentumtípusok

Példa 1 – Alapművelet

Itt egy példa, amely bemutatja, hogyan működnek ezek a függvények, és hogyan különböznek az eredmények, még akkor is, ha ugyanazt az egységet használják.

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

Eredmény:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -1 |+----------+---------------+

Azaz mindkét függvény a napok különbségét adja vissza, azonban az egyik eredmény pozitív, a másik negatív. Ennek az az oka, hogy a DATEDIFF() a második dátumot vonja ki az elsőből, míg a TIMESTAMPDIFF() az első dátumot vonja ki a másodikból.

2. példa – Az egység megváltoztatása

Amint az előző példa is mutatja, a TIMESTAMPDIFF() lehetővé teszi, hogy megadjuk az egységet, amelyben az eredményeket visszaadjuk (sőt, meg is követeli az egység megadását). Ezzel szemben a DATEDIFF() nem teszi lehetővé egység megadását. Csak napokban adja vissza az eredményt.

Az előző példát tehát úgy módosíthatjuk, hogy a TIMESTAMPDIFF() napok helyett az órák számát adja vissza:

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

Eredmény:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -24 |+----------+---------------+

Elmehetünk egészen a mikroszekundumokig:

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

Eredmény:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -86400000000 |+----------+---------------+

Példa 3 – Precizitás

A DATEDIFF() pontossága egy nap, a TIMESTAMPDIFF() pedig a mikroszekundumig mehet le. A TIMESTAMPDIFF() pontossága (és az általa összehasonlított egység) azonban még mindig a megadott egységtől függ.

SET @date1 = '2010-10-10 00:00:00', @date2 = '2010-10-10 23:59:59';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(hour, @date1, @date2) AS 'Hours', TIMESTAMPDIFF(minute, @date1, @date2) AS 'Minutes', TIMESTAMPDIFF(second, @date1, @date2) AS 'Seconds', TIMESTAMPDIFF(microsecond, @date1, @date2) AS 'Microseconds';

Eredmény:

+----------+------+-------+---------+---------+--------------+| DATEDIFF | Days | Hours | Minutes | Seconds | Microseconds |+----------+------+-------+---------+---------+--------------+| 0 | 0 | 23 | 1439 | 86399 | 86399000000 |+----------+------+-------+---------+---------+--------------+

És itt az eredmény, ha a 2. dátumot egy másodperccel növeljük (ami a következő napra hozza):

SET @date1 = '2010-10-10 00:00:00', @date2 = '2010-10-11 00:00:00';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(hour, @date1, @date2) AS 'Hours', TIMESTAMPDIFF(minute, @date1, @date2) AS 'Minutes', TIMESTAMPDIFF(second, @date1, @date2) AS 'Seconds', TIMESTAMPDIFF(microsecond, @date1, @date2) AS 'Microseconds';

Eredmény:

+----------+------+-------+---------+---------+--------------+| DATEDIFF | Days | Hours | Minutes | Seconds | Microseconds |+----------+------+-------+---------+---------+--------------+| -1 | 1 | 24 | 1440 | 86400 | 86400000000 |+----------+------+-------+---------+---------+--------------+

Itt egy másik példa, ezúttal megnézzük, hogyan néz ki, ha hónapokat, negyedéveket és éveket adunk vissza, amikor a különbség egy hónap (vagy 31 nap):

SET @date1 = '2010-10-10 00:00:00', @date2 = '2010-11-10 00:00:00';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(month, @date1, @date2) AS 'Month', TIMESTAMPDIFF(quarter, @date1, @date2) AS 'Quarter', TIMESTAMPDIFF(year, @date1, @date2) AS 'Year';

Eredmény:

+----------+------+-------+---------+------+| DATEDIFF | Days | Month | Quarter | Year |+----------+------+-------+---------+------+| -31 | 31 | 1 | 0 | 0 |+----------+------+-------+---------+------+

4. példa – Rossz argumentumtípusok

Mindkét függvény nullát ad vissza, ha rossz argumentumtípust adunk át.

SET @time1 = '12:15:35', @time2 = '00:00:00';SELECT DATEDIFF(@time1, @time2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @time1, @time2) AS 'TIMESTAMPDIFF';

Eredmény:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| NULL | NULL |+----------+---------------+

5. példa – Vegyes argumentumtípusok

Mindkét függvény lehetővé teszi, hogy egyik argumentumként dátumot, másik argumentumként pedig dátumidőt adjunk meg.

SET @thedate = '2010-10-11', @thedatetime = '2010-10-10 00:00:00';SELECT DATEDIFF(@thedate, @thedatetime) AS 'DATEDIFF', TIMESTAMPDIFF(day, @thedate, @thedatetime) AS 'TIMESTAMPDIFF';

Eredmény:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -1 |+----------+---------------+

Vélemény, hozzászólás? Kilépés a válaszból

Az e-mail-címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

Archívum

  • 2022 január
  • 2021 december
  • 2021 november
  • 2021 október
  • 2021 szeptember

Meta

  • Bejelentkezés
  • Bejegyzések hírcsatorna
  • Hozzászólások hírcsatorna
  • WordPress Magyarország
  • DeutschDeutsch
  • NederlandsNederlands
  • SvenskaSvenska
  • DanskDansk
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • RomânăRomână
  • PolskiPolski
  • ČeštinaČeština
  • MagyarMagyar
  • SuomiSuomi
  • 日本語日本語

Copyright Trend Repository 2022 | Theme by ThemeinProgress | Proudly powered by WordPress