Skip to content

Archives

  • styczeń 2022
  • grudzień 2021
  • listopad 2021
  • październik 2021
  • wrzesień 2021

Categories

  • Brak kategorii
Trend RepositoryArticles and guides
Articles

Database.Guide

On 27 stycznia, 2022 by admin

Ten artykuł analizuje różnicę między dwoma funkcjami MySQL; DATEDIFF() i TIMESTAMPDIFF().

Obydwie funkcje zwracają różnicę między dwiema datami i/lub czasami, ale wynik jest inny między tymi dwoma funkcjami.

Następująca tabela podsumowuje różnice między tymi dwiema funkcjami:

DATEDIFF() TIMESTAMPDIFF()
Wymaga 2 argumentów. Wymaga 3 argumentów.
Odejmuje 2. argument od 1. (expr1 – expr2). Odejmuje 2. argument od 3. (expr2 – expr1).
Wynik jest wyrażony jako wartość w dniach. Wynik jest wyrażony jako jednostka podana przez pierwszy argument.
Może porównywać tylko wartość daty swoich argumentów. Może porównywać wartość daty i czasu swoich argumentów.
  • Przykład 1 – Podstawowa operacja
  • Przykład 2 – Zmiana jednostki
  • Przykład 3 – Precyzja
  • Przykład 4 – Nieprawidłowe typy argumentów
  • Przykład 5 – Mixed Argument Types

Przykład 1 – Podstawowa operacja

Oto przykład, który pokazuje, jak działają te funkcje i jak wyniki są różne, nawet przy użyciu tej samej jednostki.

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

Wynik:

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

Więc obie funkcje zwracają różnicę w dniach, jednak jeden wynik jest dodatni, a drugi ujemny. Dzieje się tak, ponieważ DATEDIFF() odejmuje drugą datę od pierwszej, podczas gdy TIMESTAMPDIFF() odejmuje pierwszą datę od drugiej.

Przykład 2 – Zmiana jednostki

Jak pokazuje poprzedni przykład, funkcja TIMESTAMPDIFF() pozwala określić jednostkę, w jakiej mają być zwracane wyniki (w rzeczywistości wymaga określenia jednostki). Z drugiej strony, DATEDIFF() nie pozwala na określenie jednostki. Zwraca tylko wynik w dniach.

Możemy więc zmodyfikować poprzedni przykład tak, aby TIMESTAMPDIFF() zwracał liczbę godzin zamiast dni:

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

Wynik:

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

Możesz przejść aż do mikrosekund:

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

Result:

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

Przykład 3 – Precyzja

Precyzja DATEDIFF() wynosi jeden dzień, a TIMESTAMPDIFF() może zejść do mikrosekundy. Jednak precyzja TIMESTAMPDIFF() (i jednostka, którą porównuje) nadal zależy od określonej jednostki.

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

Wynik:

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

A oto wynik, jeśli zwiększymy 2. datę o jedną sekundę (co sprowadza ją do następnego dnia):

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

Wynik:

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

A oto kolejny przykład, tym razem sprawdzający, jak to wygląda, gdy zwracamy miesiące, kwartały i lata, gdy różnica wynosi jeden miesiąc (lub 31 dni):

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

Result:

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

Przykład 4 – Nieprawidłowe typy argumentów

Obydwie funkcje zwracają wartość null, jeśli zostanie im przekazany nieprawidłowy typ argumentu.

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

Result:

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

Przykład 5 – Mixed Argument Types

Obydwie funkcje pozwalają na przekazanie daty jako jednego argumentu i datetime jako drugiego argumentu.

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

Result:

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

.

Dodaj komentarz Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Archiwa

  • styczeń 2022
  • grudzień 2021
  • listopad 2021
  • październik 2021
  • wrzesień 2021

Meta

  • Zaloguj się
  • Kanał wpisów
  • Kanał komentarzy
  • 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