SQL Generate Date: Come Generare Date in PostgreSQL
Introduzione
Quando si lavora con database SQL, spesso è necessario generare date in base a specifiche esigenze, come intervalli temporali, date casuali o serie temporali per report e analisi. In questo articolo, vedremo come generare date in SQL utilizzando PostgreSQL, fornendo esempi pratici e dettagliati per comprendere ogni tecnica.
Generare una Singola Data in SQL
Se vogliamo generare una singola data in PostgreSQL, possiamo usare DATE
, TIMESTAMP
e CURRENT_DATE
. La sintassi base consente di definire una data esplicita o recuperare quella corrente dal sistema.
SELECT DATE '2025-02-17';
Restituisce:
2025-02-17
Possiamo anche ottenere la data corrente con la funzione CURRENT_DATE
, utile per generare report dinamici:
SELECT CURRENT_DATE;
Restituisce, ad esempio:
2025-02-17
Generare un Intervallo di Date con generate_series
Se vogliamo ottenere una serie di date tra due estremi, possiamo usare generate_series
. Questa funzione genera un set di righe con valori incrementali tra due date specificate. Il terzo parametro indica l’intervallo tra una data e l’altra.
Ecco un esempio per generare un elenco di date giornaliere per un mese:
SELECT generate_series(
'2025-02-01'::DATE,
'2025-02-28'::DATE,
'1 day'::INTERVAL
);
Restituisce un elenco di date dal 1 al 28 febbraio 2025.
Se invece vogliamo ottenere solo le date settimanali (ogni 7 giorni), possiamo modificare l’intervallo:
SELECT generate_series(
'2025-02-01'::DATE,
'2025-03-31'::DATE,
'1 week'::INTERVAL
);
Restituisce:
2025-02-01
2025-02-08
2025-02-15
...
2025-03-29
Generare Date con Timestamp
Se vogliamo includere l’orario, possiamo usare TIMESTAMP
. L’uso dell’intervallo permette di generare timestamp a intervalli regolari, come ogni ora.
SELECT generate_series(
'2025-02-01 00:00:00'::TIMESTAMP,
'2025-02-01 23:59:59'::TIMESTAMP,
'1 hour'::INTERVAL
);
Restituisce un elenco di timestamp a cadenza oraria.
Generare Date Casuali
Per generare date casuali possiamo sfruttare la funzione random()
, che genera un valore tra 0 e 1, moltiplicato per un range di giorni. Il risultato viene troncato con trunc()
per ottenere un numero intero da sommare alla data di partenza.
SELECT '2025-01-01'::DATE + trunc(random() * 60)::int AS random_date;
Restituisce, ad esempio:
2025-02-10
Per generare più date casuali in un’unica query:
SELECT '2025-01-01'::DATE + trunc(random() * 60)::int AS random_date
FROM generate_series(1, 10);
Restituisce 10 date casuali nel range specificato.
Generare il Primo o l’Ultimo Giorno del Mese
Per ottenere il primo giorno del mese corrente:
SELECT date_trunc('month', CURRENT_DATE)::DATE;
Restituisce:
2025-02-01
Per ottenere l’ultimo giorno del mese:
SELECT (date_trunc('month', CURRENT_DATE) + INTERVAL '1 month - 1 day')::DATE;
Qui date_trunc('month', CURRENT_DATE)
tronca la data al primo giorno del mese, e l’aggiunta di INTERVAL '1 month - 1 day'
ci porta all’ultimo giorno del mese corrente.
Restituisce:
2025-02-29
Casi d’Uso Pratici
1. Generare Date per un Report Mensile
Se dobbiamo generare tutte le date di un mese per un report:
SELECT generate_series(
date_trunc('month', CURRENT_DATE)::DATE,
(date_trunc('month', CURRENT_DATE) + INTERVAL '1 month - 1 day')::DATE,
'1 day'::INTERVAL
);
Restituisce tutte le date del mese corrente.
2. Selezionare Dati Solo nei Weekend
Se vogliamo filtrare solo sabati e domeniche:
SELECT generate_series(
'2025-02-01'::DATE,
'2025-02-28'::DATE,
'1 day'::INTERVAL
) AS date_series
WHERE EXTRACT(DOW FROM date_series) IN (0, 6);
Questa query utilizza EXTRACT(DOW FROM date_series)
, che restituisce il giorno della settimana (0 per domenica, 6 per sabato), filtrando i risultati per includere solo i weekend.
3. Generare Date per una Campagna Promozionale
Se una promozione dura una settimana con offerte giornaliere:
SELECT generate_series(
'2025-02-10'::DATE,
'2025-02-16'::DATE,
'1 day'::INTERVAL
);
Restituisce tutte le date dal 10 al 16 febbraio 2025.
Conclusione
Generare date in SQL con PostgreSQL è semplice grazie a generate_series
, CURRENT_DATE
, date_trunc
e altre funzioni. Questi metodi sono utili per report, analisi temporali e gestione di intervalli di date. Con gli esempi pratici visti, puoi applicare queste tecniche nei tuoi progetti per automatizzare operazioni legate alle date e migliorare l’efficienza delle query. Per ulteriori informazioni potete leggere la documentazione ufficiale PostgreSQL official documentation.