Skip to content

Archives

  • januari 2022
  • december 2021
  • november 2021
  • oktober 2021
  • september 2021

Categories

  • Geen categorieën
Trend RepositoryArticles and guides
Articles

Database.Guide

On januari 27, 2022 by admin

Dit artikel gaat in op het verschil tussen twee MySQL functies; DATEDIFF() en TIMESTAMPDIFF().

Beide functies retourneren het verschil tussen twee datums en/of tijden, maar het resultaat is verschillend tussen de twee functies.

De volgende tabel vat het verschil tussen deze twee functies samen:

DATEDIFF() TIMESTAMPDIFF()
Vraagt om 2 argumenten. Vraagt 3 argumenten.
Trekt het 2e argument af van het 1e (expr1 – expr2). Trekt het 2e argument af van het 3e (expr2 – expr1).
Het resultaat wordt uitgedrukt als een waarde in dagen. Het resultaat wordt uitgedrukt als de eenheid die door het eerste argument wordt opgegeven.
Kan alleen de datumwaarde van zijn argumenten vergelijken. Kan de datum- en tijdwaarde van zijn argumenten vergelijken.
  • Voorbeeld 1 – Basisbewerking
  • Voorbeeld 2 – De eenheid wijzigen
  • Exemplaar 3 – Precisie
  • Exemplaar 4 – Verkeerde argumenttypen
  • Voorbeeld 5 – Gemengde argumenttypen

Voorbeeld 1 – Basisbewerking

Hier volgt een voorbeeld dat laat zien hoe deze functies werken, en hoe de resultaten verschillend zijn, zelfs bij gebruik van dezelfde eenheid.

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

Resultaat:

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

Zo geven beide functies het verschil in dagen terug, maar het ene resultaat is positief en het andere negatief. Dit komt omdat DATEDIFF() de tweede datum aftrekt van de eerste, terwijl TIMESTAMPDIFF() de eerste datum aftrekt van de tweede.

Voorbeeld 2 – De eenheid wijzigen

Zoals het vorige voorbeeld laat zien, kunt u met TIMESTAMPDIFF() een eenheid opgeven voor de resultaten die moeten worden geretourneerd (in feite vereist het u om de eenheid op te geven). Met DATEDIFF() daarentegen kunt u geen eenheid opgeven. Het geeft alleen het resultaat in dagen.

Dus we kunnen het vorige voorbeeld zo wijzigen dat TIMESTAMPDIFF() het aantal uren in plaats van dagen teruggeeft:

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

Resultaat:

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

U kunt helemaal tot microseconden gaan:

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

Resultaat:

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

Exemplaar 3 – Precisie

De precisie van DATEDIFF() is een dag, en TIMESTAMPDIFF() kan tot op de microseconde gaan. De precisie van TIMESTAMPDIFF() (en de eenheid waarmee het vergelijkt) hangt echter nog steeds af van de opgegeven eenheid.

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

Resultaat:

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

En hier is het resultaat als we de 2e datum met één seconde verhogen (wat het naar de volgende dag brengt):

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

Resultaat:

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

Hier is een ander voorbeeld, dit keer zien we hoe het eruit ziet als we maanden, kwartalen en jaren teruggeven wanneer het verschil één maand is (of 31 dagen):

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

Resultaat:

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

Exemplaar 4 – Verkeerde argumenttypen

Beide functies retourneren null als ze het verkeerde argumenttype krijgen doorgegeven.

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

Resultaat:

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

Voorbeeld 5 – Gemengde argumenttypen

Beide functies staan u toe een datum als een argument op te geven en een datetime als een ander argument.

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

Resultaat:

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

Geef een antwoord Antwoord annuleren

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Archieven

  • januari 2022
  • december 2021
  • november 2021
  • oktober 2021
  • september 2021

Meta

  • Inloggen
  • Berichten feed
  • Reacties feed
  • WordPress.org
  • 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