Skip to content

Archives

  • januar 2022
  • december 2021
  • november 2021
  • oktober 2021
  • september 2021

Categories

  • Ingen kategorier
Trend RepositoryArticles and guides
Articles

Database.Guide

On januar 27, 2022 by admin

Denne artikel ser på forskellen mellem to MySQL-funktioner; DATEDIFF() og TIMESTAMPDIFF().

Både funktioner returnerer forskellen mellem to datoer og/eller tidspunkter, men resultatet er forskelligt mellem de to funktioner.

Den følgende tabel opsummerer forskellen mellem de to funktioner:

DATEDIFF() TIMESTAMPDIFF()
Kræver 2 argumenter. Kræver 3 argumenter.
Subtraherer det 2. argument fra det 1. (expr1 – expr2). Subtraherer det 2. argument fra det 3. (expr2 – expr1).
Resultatet udtrykkes som en værdi i dage. Resultatet udtrykkes som den enhed, der er angivet af det første argument.
Kan kun sammenligne datoværdien af sine argumenter. Kan sammenligne dato- og tidsværdien af sine argumenter.
  • Eksempel 1 – Grundlæggende operation
  • Eksempel 2 – Ændring af enhed
  • Eksempel 3 – Præcision
  • Eksempel 4 – forkerte argumenttyper
  • Eksempel 5 – Blandede argumenttyper

Eksempel 1 – Grundlæggende operation

Her er et eksempel, der viser, hvordan disse funktioner fungerer, og hvordan resultaterne er forskellige, selv når de bruger den samme enhed.

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

Resultat:

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

Så begge funktioner returnerer forskellen i dage, men det ene resultat er dog positivt og det andet negativt. Det skyldes, at DATEDIFF() subtraherer den anden dato fra den første, mens TIMESTAMPDIFF() subtraherer den første dato fra den anden.

Eksempel 2 – Ændring af enhed

Som det fremgår af det foregående eksempel, giver TIMESTAMPDIFF() dig mulighed for at angive en enhed, som resultaterne skal returneres som (faktisk kræver den, at du angiver enheden). På den anden side giver DATEDIFF() dig ikke mulighed for at angive en enhed. Den returnerer kun resultatet i dage.

Så vi kan ændre det foregående eksempel, så TIMESTAMPDIFF() returnerer antallet af timer i stedet for dage:

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

Resultat:

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

Du kan gå hele vejen til mikrosekunder:

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

Resultat:

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

Eksempel 3 – Præcision

Præcisionen for DATEDIFF() er en dag, og TIMESTAMPDIFF() kan gå ned til mikrosekunder. Præcisionen for TIMESTAMPDIFF() (og den enhed, som den sammenligner) afhænger dog stadig af den angivne enhed.

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

Resultat:

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

Og her er resultatet, hvis vi øger den 2. dato med et sekund (hvilket bringer den til den næste dag):

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

Resultat:

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

Her er et andet eksempel, hvor vi denne gang ser, hvordan det ser ud, når vi returnerer måneder, kvartaler og år, når forskellen er en måned (eller 31 dage):

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

Resultat:

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

Eksempel 4 – forkerte argumenttyper

Både funktioner returnerer nul, hvis de får overdraget den forkerte argumenttype.

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

Resultat:

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

Eksempel 5 – Blandede argumenttyper

Både funktioner giver mulighed for at angive en dato som det ene argument og en datotid som det andet 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';

Resultat:

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

Skriv et svar Annuller svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

Arkiver

  • januar 2022
  • december 2021
  • november 2021
  • oktober 2021
  • september 2021

Meta

  • Log ind
  • Indlægsfeed
  • Kommentarfeed
  • 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