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!

SQL - Date & Time

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