Hoppa till innehåll

Archives

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

Categories

  • Inga kategorier
Trend RepositoryArticles and guides
Articles

Database.Guide

On januari 27, 2022 by admin

Denna artikel tittar på skillnaden mellan två MySQL-funktioner; DATEDIFF() och TIMESTAMPDIFF().

Båda funktionerna returnerar skillnaden mellan två datum och/eller tidpunkter, men resultatet är olika mellan de två funktionerna.

Nedan följer en tabell som sammanfattar skillnaden mellan dessa två funktioner:

DATEDIFF() TIMESTAMPDIFF()
Kräver 2 argument. Kräver 3 argument.
Subtraherar det andra argumentet från det första (expr1 – expr2). Subtraherar det andra argumentet från det tredje (expr2 – expr1).
Resultatet uttrycks som ett värde i dagar. Resultatet uttrycks som den enhet som tillhandahålls av det första argumentet.
Kan endast jämföra datumvärdet för sina argument. Kan jämföra datum- och tidsvärdet för sina argument.
  • Exempel 1 – Grundläggande funktion
  • Exempel 2 – Ändra enhet
  • Exempel 3 – Precision
  • Exempel 4 – Felaktiga argumenttyper
  • Exempel 5 – Blandade argumenttyper

Exempel 1 – Grundläggande funktion

Här är ett exempel som visar hur dessa funktioner fungerar och hur resultaten skiljer sig åt, även om man använder samma enhet.

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

Båda funktionerna returnerar alltså skillnaden i dagar, men det ena resultatet är positivt och det andra negativt. Detta beror på att DATEDIFF() subtraherar det andra datumet från det första, medan TIMESTAMPDIFF() subtraherar det första datumet från det andra.

Exempel 2 – Ändra enhet

Som det föregående exemplet visar kan du med TIMESTAMPDIFF() ange en enhet som resultaten ska returneras som (i själva verket kräver den att du anger enheten). Å andra sidan tillåter DATEDIFF() inte att du anger en enhet. Den returnerar endast resultatet i dagar.

Så vi kan ändra det tidigare exemplet så att TIMESTAMPDIFF() returnerar antalet timmar istället för dagar:

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å hela vägen till 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 |+----------+---------------+

Exempel 3 – Precision

Precisionen för DATEDIFF() är en dag, och TIMESTAMPDIFF() kan gå ner till mikrosekunden. Precisionen för TIMESTAMPDIFF() (och enheten som den jämför) beror dock fortfarande på den angivna enheten.

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

Och här är resultatet om vi ökar det andra datumet med en sekund (vilket för det till nästa 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 |+----------+------+-------+---------+---------+--------------+

Här är ett annat exempel, denna gång för att se hur det ser ut när vi returnerar månader, kvartal och år när skillnaden är en månad (eller 31 dagar):

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

Exempel 4 – Felaktiga argumenttyper

Båda funktionerna returnerar null om de får fel argumenttyp.

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

Exempel 5 – Blandade argumenttyper

Båda funktionerna gör det möjligt att ange ett datum som ett argument och en datumtid som ett annat 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 |+----------+---------------+

Lämna ett svar Avbryt svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Arkiv

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

Meta

  • Logga in
  • Flöde för inlägg
  • Flöde för kommentarer
  • 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
  • 日本語日本語

Upphovsrätt Trend Repository 2022 | Tema av ThemeinProgress | Drivs med WordPress