Skip to content

Archives

  • ianuarie 2022
  • decembrie 2021
  • noiembrie 2021
  • octombrie 2021
  • septembrie 2021

Categories

  • Nicio categorie
Trend RepositoryArticles and guides
Articles

Database.Guide

On ianuarie 27, 2022 by admin

Acest articol analizează diferența dintre două funcții MySQL; DATEDIFF() și TIMESTAMPDIFF().

Ambele funcții returnează diferența dintre două date și/sau ore, dar rezultatul este diferit între cele două funcții.

Tabelul următor rezumă diferența dintre aceste două funcții:

DATEDIFF() TIMESTAMPDIFF()
Cercetează 2 argumente. Cerce 3 argumente.
Subțiază al doilea argument din primul (expr1 – expr2). Subțiază al doilea argument din al treilea (expr2 – expr1). Subțiază al doilea argument din al treilea (expr2 – expr1).
Rezultatul este exprimat ca o valoare în zile. Rezultatul este exprimat în unitatea furnizată de primul argument.
Poate compara numai valoarea de dată a argumentelor sale. Poate compara valoarea de dată și oră a argumentelor sale.
  • Exemplu 1 – Operație de bază
  • Exemplu 2 – Schimbarea unității
  • Exemplu 3 – Precizie
  • Exemplu 4 – Tipuri de argumente greșite
  • Exemplu 5 – Tipuri de argumente amestecate

Exemplu 1 – Operație de bază

Iată un exemplu care demonstrează cum funcționează aceste funcții și cum rezultatele sunt diferite, chiar dacă se folosește aceeași unitate.

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

Rezultat:

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

Ambele funcții returnează deci diferența în zile, însă un rezultat este pozitiv și celălalt negativ. Acest lucru se datorează faptului că DATEDIFF() scade a doua dată din prima, în timp ce TIMESTAMPDIFF() scade prima dată din a doua.

Exemplu 2 – Schimbarea unității

După cum demonstrează exemplul anterior, funcția TIMESTAMPDIFF() vă permite să specificați o unitate pentru ca rezultatele să fie returnate ca (de fapt, vă cere să specificați unitatea). Pe de altă parte, DATEDIFF() nu vă permite să specificați o unitate. Acesta returnează rezultatul doar în zile.

Așa că am putea modifica exemplul anterior astfel încât TIMESTAMPDIFF() să returneze numărul de ore în loc de zile:

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

Rezultat:

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

Se poate merge până la microsecunde:

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

Rezultat:

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

Exemplu 3 – Precizie

Precizia lui DATEDIFF() este de o zi, iar TIMESTAMPDIFF() poate merge până la microsecundă. Cu toate acestea, precizia lui TIMESTAMPDIFF() (și unitatea pe care o compară) depinde în continuare de unitatea specificată.

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

Rezultat:

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

Și iată rezultatul dacă creștem a 2-a dată cu o secundă (ceea ce o aduce la ziua următoare):

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

Rezultat:

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

Rezultat:

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

Iată un alt exemplu, de data aceasta văzând cum arată când returnăm luni, trimestre și ani atunci când diferența este de o lună (sau 31 de zile):

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

Rezultat:

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

Exemplu 4 – Tipuri de argumente greșite

Ambele funcții returnează null dacă li se trece tipul de argument greșit.

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

Rezultat:

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

Exemplu 5 – Tipuri de argumente amestecate

Ambele funcții vă permit să furnizați o dată ca un argument și un datatime ca un alt 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';

Rezultat:

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

Lasă un răspuns Anulează răspunsul

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Arhive

  • ianuarie 2022
  • decembrie 2021
  • noiembrie 2021
  • octombrie 2021
  • septembrie 2021

Meta

  • Autentificare
  • Flux intrări
  • Flux comentarii
  • 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