DATE_SUB() în MySQL

Calcule cu date MySQL 5.0+

Scade un interval dintr-o dată, de exemplu „acum 30 de zile”.

Sintaxă
DATE_SUB(data, INTERVAL valoare unitate)
SUBDATE(data, INTERVAL valoare unitate)
SUBDATE(data, zile)

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