SQL - Date & Time: Una Guida Completa per Principianti
Ciao a tutti, futuri maghi dei database! Oggi ci immergeremo nel mondo affascinante delle date e delle ore in SQL. Come il tuo amico del quartiere insegnante di computer, sono qui per guidarti in questo viaggio con tantissimi esempi e spiegazioni. Allora, prepara la tua macchina del tempo virtuale e iniziamo!
Tipi di Dati Date & Time in SQL
Prima di iniziare a manipolare date e ore, dobbiamo capire come SQL memorizza queste informazioni. Pensa a questi tipi di dati come contenitori speciali progettati specificamente per i dati temporali.
DATE
Il tipo di dati DATE
memorizza una data nel formato YYYY-MM-DD.
CREATE TABLE eventi (
event_id INT PRIMARY KEY,
event_name VARCHAR(100),
event_date DATE
);
INSERT INTO eventi (event_id, event_name, event_date)
VALUES (1, 'Festa Aziendale', '2023-07-15');
In questo esempio, stiamo creando una tabella eventi
e aggiungendo una festa aziendale programmata per il 15 luglio 2023. Il tipo di dati DATE
ci assicura che stiamo memorizzando solo la data, senza informazioni temporali.
TIME
Il tipo di dati TIME
memorizza l'ora nel formato HH:MI:SS.
CREATE TABLE orario_lezioni (
class_id INT PRIMARY KEY,
class_name VARCHAR(100),
start_time TIME
);
INSERT INTO orario_lezioni (class_id, class_name, start_time)
VALUES (1, 'Introduzione a SQL', '09:30:00');
Qui, stiamo creando un orario delle lezioni e aggiungendo una lezione di SQL che inizia alle 9:30 AM. Il tipo di dati TIME
ci permette di memorizzare questo orario con precisione.
DATETIME
Il tipo di dati DATETIME
combina sia la data che l'ora, tipicamente nel formato YYYY-MM-DD HH:MI:SS.
CREATE TABLE appuntamenti (
appointment_id INT PRIMARY KEY,
patient_name VARCHAR(100),
appointment_datetime DATETIME
);
INSERT INTO appuntamenti (appointment_id, patient_name, appointment_datetime)
VALUES (1, 'John Doe', '2023-06-20 14:30:00');
In questo esempio, stiamo programmando una visita medica per John Doe il 20 giugno 2023 alle 2:30 PM. Il tipo di dati DATETIME
ci permette di memorizzare sia la data che l'ora in una singola colonna.
TIMESTAMP
Il tipo di dati TIMESTAMP
è simile a DATETIME
, ma viene spesso utilizzato per tenere traccia di quando un record è stato modificato per l'ultima volta.
CREATE TABLE articoli_blog (
post_id INT PRIMARY KEY,
title VARCHAR(200),
content TEXT,
last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
INSERT INTO articoli_blog (post_id, title, content)
VALUES (1, 'Il Mio Primo Post di Blog', 'Ciao, Mondo!');
In questo esempio, la colonna last_updated
verrà automaticamente impostata alla data e ora corrente quando un record viene inserito o aggiornato.
Funzioni Date & Time in SQL
Ora che sappiamo come memorizzare date e ore, esploriamo alcune delle magiche funzioni che SQL offre per manipolare questi dati. Mi piace pensare a queste funzioni come strumenti di viaggio nel tempo nel nostro set di strumenti SQL!
Data e Ora Corrente
Iniziamo con le basi - ottenere la data e l'ora corrente.
SELECT CURRENT_DATE() AS oggi,
CURRENT_TIME() AS ora_corrente,
NOW() AS data_ora_corrente;
Questa query ti darà la data corrente, l'ora corrente e la data e ora corrente. È come chiedere a SQL, "Hey, che ore sono?" Utile, vero?
Estrarre Parti di una Data
A volte, abbiamo bisogno solo di parti specifiche di una data. SQL ha funzioni anche per questo!
SELECT YEAR('2023-06-20') AS anno,
MONTH('2023-06-20') AS mese,
DAY('2023-06-20') AS giorno,
WEEKDAY('2023-06-20') AS giorno_settimana;
Questa query estrae l'anno, il mese, il giorno e il giorno della settimana dalla data fornita. È come dissezionare una data per ottenere le informazioni di cui abbiamo bisogno.
Aritmetica con Date
SQL ci permette di eseguire operazioni aritmetiche sulle date. Questo è particolarmente utile per calcolare durate o trovare date future/passate.
SELECT DATE_ADD('2023-06-20', INTERVAL 7 DAY) AS una_settimana_dopo,
DATE_SUB('2023-06-20', INTERVAL 1 MESE) AS un_mese_fa,
DATEDIFF('2023-12-31', '2023-06-20') AS giorni_fino_al_capodanno;
In questo esempio, stiamo aggiungendo 7 giorni a una data, sottraendo 1 mese da una data e calcolando il numero di giorni tra due date. È come avere una macchina del tempo tra le nostre dita!
Formattare Date
A volte, dobbiamo presentare le date in un formato specifico. La funzione DATE_FORMAT
arriva in nostro aiuto.
SELECT DATE_FORMAT('2023-06-20', '%W, %M %d, %Y') AS data_formattata,
DATE_FORMAT('2023-06-20 14:30:00', '%h:%i %p') AS ora_formattata;
Questa query formatta la data come "Tuesday, June 20, 2023" e l'ora come "02:30 PM". È come vestire le nostre date per unaoccasione speciale!
Ecco una tabella di alcuni specificatori di formato comunemente utilizzati:
Specificatore | Descrizione | Esempio |
---|---|---|
%Y | Anno a 4 cifre | 2023 |
%y | Anno a 2 cifre | 23 |
%M | Nome del mese | January |
%m | Mese (01-12) | 01 |
%d | Giorno del mese (01-31) | 01 |
%W | Nome del giorno della settimana | Monday |
%w | Giorno della settimana (0-6, 0 è domenica) | 1 |
%H | Ora (00-23) | 13 |
%h | Ora (01-12) | 01 |
%i | Minuti (00-59) | 30 |
%s | Secondi (00-59) | 45 |
%p | AM o PM | PM |
Mettere Tutto Insieme
Chiudiamo con un esempio più complesso che combina diversi concetti:
CREATE TABLE log_accedi (
login_id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
login_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO log_accedi (user_id) VALUES (1), (2), (3);
SELECT
user_id,
login_time,
DATE_FORMAT(login_time, '%W, %M %d, %Y at %h:%i %p') AS formatted_login_time,
CASE
WHEN WEEKDAY(login_time) IN (5, 6) THEN 'Login nel Weekend'
ELSE 'Login in Giorni Feriali'
END AS login_type,
TIMESTAMPDIFF(HOUR, login_time, NOW()) AS ore_da_login
FROM log_accedi
WHERE login_time > DATE_SUB(CURRENT_DATE(), INTERVAL 1 SETTIMANA);
Questo esempio crea una tabella log_accedi
, inserisce alcuni dati e poi li query con diverse manipolazioni di date e ore. Stiamo formattando l'ora di login, determinando se è stato un login nel weekend o in giorno feriale e calcolando quante ore sono passate dal login.
E voilà, ragazzi! Abbiamo viaggiato nel tempo con SQL, imparando i tipi di dati date e ore e le funzioni. Ricorda, la pratica rende perfetti, quindi non aver paura di sperimentare con questi concetti. Prima di sapere, sarai in grado di piegare il tempo a tuo volere... almeno nei tuoi database!
Credits: Image by storyset