Ce face make_date, make_timestamp, make_interval
Când anul, luna și ziua sunt în coloane separate (sau vin ca numere dintr-un formular), make_date(2026, 10, 25) creează direct valoarea date. Este mai sigur decât (an || '-' || luna || '-' || zi)::date.
make_timestamp adaugă ora, minutul și secundele. make_interval primește parametri cu nume, de exemplu make_interval(days => 10), util când numărul de zile vine dintr-o coloană.
O dată imposibilă (30 februarie) dă eroare în loc să fie mutată în altă zi.
Parametri
| Parametru | Descriere |
|---|---|
an, luna, zi |
Numere întregi. Un an negativ înseamnă î.Hr. |
ora, minut, secunde |
Pentru make_timestamp; secundele pot avea zecimale. |
years, months, weeks, days, hours, mins, secs |
Pentru make_interval; se dau cu nume (days => 3). |
Ce returnează
date, timestamp (fără fus orar), respectiv interval.
Exemple
Exemplul 1: Valori construite din numere
SELECT make_date(2026, 10, 25) AS data,
make_timestamp(2026, 10, 25, 14, 30, 0) AS moment,
make_interval(days => 10) AS zece_zile,
make_interval(hours => 2, mins => 30) AS durata;
Rezultat în psql
data | moment | zece_zile | durata
------------+---------------------+-----------+----------
2026-10-25 | 2026-10-25 14:30:00 | 10 days | 02:30:00
(1 row)
Exemplul 2: Termen de plată din coloane
SELECT numar, make_date(an, luna, zi) + make_interval(days => zile_plata) AS scadenta
FROM facturi;
Rezultat în psql
numar | scadenta
--------+---------------------
F-1001 | 2026-11-24 00:00:00
F-1002 | 2026-11-09 00:00:00
(2 rows)
Exemplul 3: Dată care nu există
SELECT make_date(2026, 2, 30);
Rezultat în psql
ERROR: date field value out of range: 2026-02-30
Greșeli frecvente
- Aduni un interval la o dată și te aștepți tot la
date:date + intervaldătimestamp. Pentru un număr de zile foloseștedate + integer(make_date(...) + 30). - Dai parametrii lui
make_intervalfără nume și în altă ordine decât cea din definiție. Numește-i:make_interval(days => 3).
Comenzi înrudite
age: Calculează diferența dintre două date ca interval „simbolic”, în ani, luni și zile, de exemplu vârsta unei persoane.