Ce face TIMESTAMPDIFF()
TIMESTAMPDIFF() este funcția cea mai flexibilă pentru diferențe. Ordinea este început, sfârșit (inversă față de DATEDIFF()). Rezultatul este un număr întreg, rotunjit în jos.
Este metoda corectă pentru calculul vârstei: TIMESTAMPDIFF(YEAR, data_nasterii, CURDATE()).
Parametri
| Parametru | Descriere |
|---|---|
unitate |
MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR. |
inceput |
Momentul de început. |
sfarsit |
Momentul de final. |
Ce returnează
Un număr întreg.
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE comenzi (
id INT PRIMARY KEY,
client VARCHAR(30),
plasata DATETIME,
livrata DATETIME
);
INSERT INTO comenzi VALUES
(101, 'Ana', '2026-09-28 09:15:00', '2026-10-01 14:20:00'),
(102, 'Bogdan', '2026-10-05 18:40:00', '2026-10-06 10:05:00'),
(103, 'Cristina', '2026-10-17 22:10:00', NULL),
(104, 'Dan', '2026-12-30 11:00:00', '2027-01-04 16:30:00');
Exemplul 1: Vârsta la o dată anume
CREATE TABLE persoane (nume VARCHAR(20), nascut DATE);
INSERT INTO persoane VALUES ('Ana', '1995-03-12'), ('Mihai', '2008-10-20');
SELECT nume, TIMESTAMPDIFF(YEAR, nascut, '2026-10-19') AS varsta FROM persoane;
Rezultat
+-------+--------+
| nume | varsta |
+-------+--------+
| Ana | 31 |
| Mihai | 17 |
+-------+--------+
Exemplul 2: Durata livrării în ore
SELECT id, TIMESTAMPDIFF(HOUR, plasata, livrata) AS ore
FROM comenzi
WHERE livrata IS NOT NULL
ORDER BY id;
Rezultat
+-----+------+
| id | ore |
+-----+------+
| 101 | 77 |
| 102 | 15 |
| 104 | 125 |
+-----+------+
Greșeli frecvente
- Calculezi vârsta cu
DATEDIFF(...)/365. Anii bisecți dau erori în preajma zilei de naștere.TIMESTAMPDIFF(YEAR, ...)este exact.
Comenzi înrudite
DATEDIFF(): Numărul de zile dintre două date (data1 – data2), ignorând orele.TIMESTAMPADD(): Adaugă un număr de unități (minute, zile, luni…) la o dată; alternativă la DATE_ADD.TIMEDIFF(): Diferența dintre două ore sau date-ore, ca durată HH:MM:SS.