Ce face DATE_SUB()
DATE_SUB() face inversul lui DATE_ADD(). Este folosită des în filtre de tipul „ultimele 7 zile”. SUBDATE() este sinonim și acceptă și un număr simplu de zile.
Parametri
| Parametru | Descriere |
|---|---|
data |
Data de pornire. |
valoare unitate |
Intervalul scăzut, ex. INTERVAL 30 DAY. |
Ce returnează
Data nouă.
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: Comenzile din ultimele 30 de zile față de o dată
SELECT id, client, plasata
FROM comenzi
WHERE plasata >= DATE_SUB('2026-10-19', INTERVAL 30 DAY)
AND plasata < '2026-10-20'
ORDER BY id;
Rezultat
+-----+----------+---------------------+
| id | client | plasata |
+-----+----------+---------------------+
| 101 | Ana | 2026-09-28 09:15:00 |
| 102 | Bogdan | 2026-10-05 18:40:00 |
| 103 | Cristina | 2026-10-17 22:10:00 |
+-----+----------+---------------------+
Exemplul 2: SUBDATE și operatorul –
SELECT SUBDATE('2026-10-19', 19) AS subdate_zile,
'2026-03-31' - INTERVAL 1 MONTH AS luna_trecuta;
Rezultat
+--------------+--------------+
| subdate_zile | luna_trecuta |
+--------------+--------------+
| 2026-09-30 | 2026-02-28 |
+--------------+--------------+
Greșeli frecvente
- Filtrezi cu
WHERE DATE_SUB(plasata, ...) > ..., adică aplici funcția pe coloană. Pune calculul pe valoarea fixă, ca indexul să poată fi folosit.
Comenzi înrudite
DATE_ADD(): Adaugă un interval (zile, luni, ani, ore etc.) la o dată.DATEDIFF(): Numărul de zile dintre două date (data1 – data2), ignorând orele.NOW / CURDATE / DATE_FORMAT: Data și ora curentă și formatarea datelor.