Quante volte hai visto applicazioni che lavorano con date e orari? Ordini online, orari, cronologia delle modifiche nel database — tutto dipende dal salvataggio corretto del tempo. PostgreSQL ti dà strumenti potenti per gestire questi dati, e ovviamente le tabelle con il tempo non sono tabelle spaventose con orologi e minuti, ma una struttura chiara che ti permette di analizzare e ordinare gli eventi.
I tipi per data e ora ti permettono di:
- Salvare solo la data
DATE, solo l'orarioTIMEoppure entrambi insiemeTIMESTAMP. - Fare operazioni come aggiungere giorni, calcolare la differenza tra date e filtrare i record secondo criteri temporali.
- Lavorare con i fusi orari (ma questa è roba per le prossime lezioni).
Tipi di dati: DATE, TIME, TIMESTAMP
Tipo di dato DATE
Il tipo DATE serve per salvare solo la data, senza l'orario. Registra anno, mese e giorno. Questo tipo è utile quando:
- Devi salvare la data di nascita di un utente.
- La data dell'evento è importante, ma l'orario non conta.
Esempio di formato: YYYY-MM-DD (anno-mese-giorno).
Esempio:
| id | name - VARCHAR(100) | event_date - DATE |
|---|---|---|
| 1 | SQL Workshop | 2025-06-15 |
| 2 | Python | 2025-06-17 |
| 3 | Java Courses | 2025-06-25 |
Tipo di dato TIME
Il tipo TIME si usa per salvare solo l'orario. È utile quando:
- Devi salvare un orario, tipo l'inizio della giornata lavorativa.
- L'orario conta, ma la data no.
Esempio di formato: HH:MI:SS (ore:minuti:secondi).
Esempio:
| id | task_name - VARCHAR(100) | start_time - TIME |
|---|---|---|
| 1 | Team Meeting | 09:00:00 |
| 2 | Code Review | 11:30:00 |
| 3 | Client Call | 15:00:00 |
Tipo di dato TIMESTAMP
TIMESTAMP è una combinazione di data e ora. È utile quando:
- Devi registrare un momento preciso, tipo quando un utente fa il login.
- Serve un timestamp per tracciare le modifiche (logging).
Esempio di formato: YYYY-MM-DD HH:MI:SS (anno-mese-giorno ore:minuti:secondi).
Esempio:
| id | action - VARCHAR(100) | login_time - TIMESTAMP |
|---|---|---|
| 1 | User Login | 2023-10-15 14:30:00 |
| 2 | File Uploaded | 2023-10-15 15:10:00 |
| 3 | User Logout | 2023-10-15 16:45:00 |
Operazioni con data e ora
Ora che sappiamo quali tipi esistono, vediamo come usarli. PostgreSQL offre un sacco di funzioni built-in per fare operazioni con date e orari.
Estrazione di parti di data e ora
Se hai un timestamp (TIMESTAMP) e vuoi tirare fuori solo l'anno, il mese, il giorno o l'ora, usa la funzione EXTRACT.
Esempio:
SELECT EXTRACT(YEAR FROM TIMESTAMP '2025-06-15 14:30:00') AS anno;
-- Risultato: 2025
SELECT EXTRACT(MONTH FROM TIMESTAMP '2025-06-15 14:30:00') AS mese;
-- Risultato: 06
SELECT EXTRACT(DAY FROM TIMESTAMP '2025-06-15 14:30:00') AS giorno;
-- Risultato: 15
Aggiunta e sottrazione di intervalli di tempo
Vuoi sapere che giorno sarà tra una settimana? O che giorno era ieri? Usa le operazioni con gli intervalli.
Esempio:
-- Aggiungi 7 giorni alla data corrente
SELECT CURRENT_DATE + INTERVAL '7 days' AS prossima_settimana;
-- Sottrai 1 mese
SELECT CURRENT_DATE - INTERVAL '1 month' AS mese_scorso;
Confronto tra date
Come fai a sapere se un evento è già successo? Più facile che trovare un bug nel codice — basta confrontare i valori.
Esempio:
SELECT event_date
FROM events
WHERE event_date < CURRENT_DATE;
-- Seleziona tutti gli eventi nel passato
Scoprirai di più sulle funzioni per lavorare con data e ora nelle prossime lezioni. Per ora basta ricordare che questi tipi esistono — è già abbastanza.
Problemi di fusi orari e standard del tempo
Anche se in questa lezione non entriamo nei dettagli sui fusi orari, è importante dire che PostgreSQL supporta il tipo TIMESTAMPTZ (timestamp con fuso orario). Per esempio, 2023-10-15 14:30:00+02 indica che quell'orario è nel fuso UTC+2.
Ne parleremo sicuramente nel nostro corso, ma più avanti :P
Esempio
Ora è il momento di mettere in pratica quello che abbiamo imparato. Creiamo una tabella che salva l'orario delle lezioni degli studenti.
| id | subject_name | class_date - DATE | start_time - TIME | end_time - TIME | created_at - TIMESTAMP |
|---|---|---|---|---|---|
| 1 | Mathematics | 2023-10-16 | 09:00:00 | 10:30:00 | 2023-10-12 14:00:00 |
| 2 | Physics | 2023-10-16 | 11:00:00 | 12:30:00 | 2023-10-12 14:00:00 |
| 3 | Chemistry | 2023-10-17 | 09:00:00 | 10:30:00 | 2023-10-12 14:01:00 |
| 4 | Literature | 2023-10-17 | 11:00:00 | 12:30:00 | 2023-10-12 14:01:00 |
| 5 | Computer Science | 2023-10-18 | 10:00:00 | 11:30:00 | 2023-10-12 14:02:00 |
Tra qualche lezione creerai tabelle così nel database usando query SQL. Per ora, goditi la vista :)
Errori tipici
Formato di data e ora: quando inserisci dati è importante rispettare il formato giusto: YYYY-MM-DD per le date e HH:MI:SS per l'orario. PostgreSQL potrebbe non capire se provi a inserire una data come "15/10/2023".
Mismatch di tipi di dati: se provi a scrivere un valore testuale in un campo di tipo DATE otterrai un errore.
Errori con intervalli di tempo: se aggiungi, per esempio, 30 giorni a febbraio, PostgreSQL lo gestirà correttamente, ma la data potrebbe finire già a marzo.
Ora conosci i tipi di dati per lavorare con data e ora in PostgreSQL. Nei progetti veri ti aiuterà a gestire orari, loggare eventi o tracciare cose importanti nel sistema!
GO TO FULL VERSION