Aritmetica delle date in MySQL: DATE_ADD, DATE_SUB e INTERVAL (con esempi pratici)

目次

1. Introduzione

MySQL è un RDBMS (Relational Database Management System) ampiamente utilizzato per applicazioni web e gestione di database. Tra le sue numerose funzionalità, le operazioni sulle date sono una delle funzioni più importanti che gli sviluppatori usano quotidianamente. Per esempio, esistono innumerevoli scenari che coinvolgono le date, come impostare promemoria ricorrenti, estrarre dati entro un intervallo di tempo specifico e calcolare calendari.

In particolare, l’aggiunta e la sottrazione di date sono operazioni molto frequenti. MySQL fornisce funzioni comode come DATE_ADD e DATE_SUB, insieme alla clausola INTERVAL per specificare le durate. Sfruttandole, è possibile mantenere il codice conciso e, al contempo, eseguire in modo efficiente calcoli di data complessi.

In questo articolo spiegheremo l’aggiunta e la sottrazione di date in MySQL in modo adatto ai principianti. Copriremo tutto, dall’uso di base a esempi avanzati, fornendo conoscenze pratiche che potrai utilizzare in progetti reali. Spiegheremo anche i problemi più comuni e i punti importanti da tenere d’occhio, così che anche se non ti senti sicuro nella gestione delle date, potrai apprendere con tranquillità.

Al termine della lettura avrai le conoscenze e le tecniche pratiche necessarie per le operazioni sulle date in MySQL—e sarai in grado di applicarle ai tuoi progetti.

2. Conoscenze di base necessarie per le operazioni sulle date in MySQL

Quando si lavora con le date in MySQL, è importante comprendere prima i tipi di dati data/ora e i concetti fondamentali. Questa sezione spiega le conoscenze di base necessarie per le operazioni sulle date in MySQL.

Tipi di dati data/ora

MySQL fornisce diversi tipi di dati per gestire date e orari. È importante comprendere le caratteristiche di ciascun tipo e scegliere quello più appropriato.

  1. DATE
  • Memorizza una data del calendario (anno, mese, giorno).
  • Formato: YYYY-MM-DD
  • Esempio: 2025-01-01
  • Usalo quando ti serve solo la data (es. compleanno, data di creazione).
  1. DATETIME
  • Memorizza data e ora.
  • Formato: YYYY-MM-DD HH:MM:SS
  • Esempio: 2025-01-01 12:30:45
  • Usalo quando ti servono sia data che ora (es. timestamp di un evento).
  1. TIMESTAMP
  • Memorizza data/ora basata su UTC (Coordinated Universal Time) e supporta la conversione dei fusi orari.
  • Formato: YYYY-MM-DD HH:MM:SS
  • Esempio: 2025-01-01 12:30:45
  • Utilizzato quando è necessario gestire dati sensibili al fuso orario o per i log di sistema.
  1. TIME
  • Memorizza un valore di ora.
  • Formato: HH:MM:SS
  • Esempio: 12:30:45
  • Usalo quando ti serve un valore di ora puro (es. orari di apertura).
  1. YEAR
  • Memorizza solo il valore dell’anno.
  • Formato: YYYY
  • Esempio: 2025
  • Usalo quando gestisci dati a livello di anno.

Note importanti quando si usano i tipi data/ora

  • Impostazioni del fuso orario MySQL utilizza, per impostazione predefinita, le impostazioni del fuso orario del server. Tuttavia, se la tua applicazione utilizza un fuso diverso, possono verificarsi incoerenze nei dati. Imposta esplicitamente il fuso orario quando necessario.
  • Gestione delle date non valide Per impostazione predefinita, MySQL è configurato per generare un errore se viene specificata una data non valida (es. 2025-02-30). Tuttavia, a seconda della configurazione del server, potrebbe essere convertita in NULL o in un valore predefinito, perciò è importante verificare le proprie impostazioni.

Casi d’uso comuni per le operazioni sulle date

  1. Estrazione di dati per un periodo specifico
  • Esempio: Recuperare i dati di vendita dell’ultima settimana.
  1. Calcoli di programmazione
  • Esempio: Inviare una notifica 30 giorni dopo la registrazione di un utente.
  1. Gestione delle date di scadenza
  • Esempio: Gestire le date di scadenza dei coupon.

Riepilogo delle basi

MySQL fornisce strumenti potenti per gestire date e orari. Comprendendo i tipi di dati data/ora e scegliendoli in modo appropriato, puoi migliorare la progettazione del database e l’efficienza delle query. Nella sezione successiva esamineremo più da vicino la funzione DATE_ADD come metodo concreto per le operazioni sulle date.

3. Funzione DATE_ADD: Nozioni di base e utilizzo pratico

La funzione DATE_ADD di MySQL è uno strumento comodo usato per aggiungere un intervallo specificato a una data. Questa sezione spiega tutto, dall’uso di base agli esempi pratici.

Cos’è DATE_ADD?

DATE_ADD aggiunge la durata specificata in una clausola INTERVAL a una data fornita e restituisce una nuova data. È uno strumento fondamentale per semplificare i calcoli di data.

Sintassi di base:

DATE_ADD(date, INTERVAL value unit)
  • date : La data o il datetime su cui operare.
  • value : Il numero da aggiungere.
  • unit : L’unità di intervallo (es., DAY, MONTH, YEAR, HOUR, MINUTE, SECOND).

Unità INTERVAL disponibili

Puoi usare le seguenti unità INTERVAL con DATE_ADD.

UnitDescription
SECONDSeconds
MINUTEMinutes
HOURHours
DAYDays
WEEKWeeks
MONTHMonths
YEARYears

Esempi di base

Ecco esempi concreti di DATE_ADD.

  1. Calcola 1 giorno dopo :
    SELECT DATE_ADD('2025-01-01', INTERVAL 1 DAY);
    

Risultato: 2025-01-02

  1. Calcola 1 mese dopo :
    SELECT DATE_ADD('2025-01-01', INTERVAL 1 MONTH);
    

Risultato: 2025-02-01

  1. Calcola 1 anno dopo :
    SELECT DATE_ADD('2025-01-01', INTERVAL 1 YEAR);
    

Risultato: 2026-01-01

  1. Calcola 3 ore dopo :
    SELECT DATE_ADD('2025-01-01 12:00:00', INTERVAL 3 HOUR);
    

Risultato: 2025-01-01 15:00:00

  1. Aggiungi più unità (usando il nesting) :
    SELECT DATE_ADD(DATE_ADD('2025-01-01', INTERVAL 1 DAY), INTERVAL 3 HOUR);
    

Risultato: 2025-01-02 03:00:00

Calcoli di data dinamici

Puoi anche applicare DATE_ADD a date calcolate dinamicamente.

  1. Calcola 7 giorni da oggi :
    SELECT DATE_ADD(CURDATE(), INTERVAL 7 DAY);
    

Risultato: La data 7 giorni da oggi.

  1. Calcola 30 minuti da ora :
    SELECT DATE_ADD(NOW(), INTERVAL 30 MINUTE);
    

Risultato: Il datetime 30 minuti da ora.

Esempi pratici

  1. Calcolare una data di scadenza : Calcola un periodo di garanzia di 30 giorni dalla data di acquisto.
    SELECT DATE_ADD(purchase_date, INTERVAL 30 DAY) AS expiry_date
    FROM orders;
    
  1. Inviare un promemoria di prenotazione : Calcola 3 giorni prima della data di un evento e invia un promemoria.
    SELECT DATE_ADD(event_date, INTERVAL -3 DAY) AS reminder_date
    FROM events;
    
  1. Calcolare il limite di conservazione dei log : Calcola 90 giorni prima di oggi e elimina i log più vecchi.
    DELETE FROM logs
    WHERE log_date < DATE_ADD(CURDATE(), INTERVAL -90 DAY);
    

Note

  • Gestione di date non valide : Se il risultato di DATE_ADD diventa una data non valida, MySQL può restituire NULL. Assicurati che i dati di input siano in un formato valido.
  • Impatto del fuso orario : Se usi fusi orari, funzioni come CURRENT_TIMESTAMP e NOW() potrebbero essere influenzate.

DATE_ADD è uno degli strumenti più basilari ma potenti per le operazioni di data in MySQL. Una volta che lo padroneggerai, potrai gestire molte operazioni di data in modo efficiente. Nella sezione successiva, tratteremo in dettaglio la funzione DATE_SUB.

4. Funzione DATE_SUB: Nozioni di base e utilizzo pratico

DATE_SUB è il contrappeso a DATE_ADD in MySQL. Viene usato per sottrarre un intervallo specificato da una data. Questa sezione spiega le basi e gli esempi pratici che puoi usare nel lavoro reale.

Cos’è DATE_SUB?

DATE_SUB sottrae la durata specificata in una clausola INTERVAL da una data o datetime forniti e restituisce una nuova data. È uno strumento comodo per la sottrazione di date.

Sintassi di base:

DATE_SUB(date, INTERVAL value unit)
  • date : La data o il datetime su cui operare.
  • value : Il numero da sottrarre.
  • unit : L’unità di intervallo (es., DAY, MONTH, YEAR, HOUR, MINUTE, SECOND).

Esempi di base

Ecco esempi concreti di DATE_SUB.

  1. Calcola 1 giorno prima :
    SELECT DATE_SUB('2025-01-01', INTERVAL 1 DAY);
    

Risultato: 2024-12-31

  1. Calcola 1 mese prima :
    SELECT DATE_SUB('2025-01-01', INTERVAL 1 MONTH);
    

Risultato: 2024-12-01

  1. Calculate 1 year earlier :
    SELECT DATE_SUB('2025-01-01', INTERVAL 1 YEAR);
    

Risultato: 2024-01-01

  1. Calcola 3 ore prima :
    SELECT DATE_SUB('2025-01-01 12:00:00', INTERVAL 3 HOUR);
    

Risultato: 2025-01-01 09:00:00

  1. Sottrai più unità (usando l’annidamento) :
    SELECT DATE_SUB(DATE_SUB('2025-01-01', INTERVAL 1 DAY), INTERVAL 3 HOUR);
    

Risultato: 2024-12-31 21:00:00

Calcoli di Data Dinamici

Puoi anche usare DATE_SUB basato su date dinamiche.

  1. Calcola 7 giorni prima di oggi :
    SELECT DATE_SUB(CURDATE(), INTERVAL 7 DAY);
    

Risultato: La data 7 giorni prima di oggi.

  1. Calcola 30 minuti prima di ora :
    SELECT DATE_SUB(NOW(), INTERVAL 30 MINUTE);
    

Risultato: La data/ora 30 minuti prima di ora.

Esempi Pratici

  1. Recupera dati degli ultimi 30 giorni :
    SELECT * 
    FROM orders
    WHERE order_date > DATE_SUB(CURDATE(), INTERVAL 30 DAY);
    
  1. Elimina dati più vecchi di 90 giorni :
    DELETE FROM logs
    WHERE log_date < DATE_SUB(CURDATE(), INTERVAL 90 DAY);
    
  1. Notifica di promemoria : Imposta un promemoria 1 giorno prima dell’inizio di un evento.
    SELECT event_name, DATE_SUB(event_date, INTERVAL 1 DAY) AS reminder_date
    FROM events;
    
  1. Calcolo del turno : Calcola 3 ore prima dell’ora di inizio del turno.
    SELECT DATE_SUB(shift_start, INTERVAL 3 HOUR) AS preparation_time
    FROM work_shifts;
    

Note

  • Gestione di date non valide : Se il risultato della sottrazione diventa una data non valida, MySQL può restituire NULL. È importante convalidare la data originale.
  • Impatto del fuso orario : Se le impostazioni del fuso orario del server differiscono, i risultati di DATE_SUB possono spostarsi in modo inatteso. Usa CONVERT_TZ() quando necessario.

DATE_SUB è altrettanto importante quanto DATE_ADD per le operazioni di data in MySQL. Mantenendo la logica di sottrazione concisa, puoi migliorare l’efficienza nella gestione e analisi dei dati. Nella sezione successiva, spiegheremo 5. Dettagli della clausola INTERVAL e come usarla.

5. Dettagli della clausola INTERVAL e come usarla

La clausola INTERVAL è usata nelle operazioni di data/ora di MySQL, tipicamente insieme a DATE_ADD e DATE_SUB, per aggiungere o sottrarre una durata. Questa sezione spiega la clausola INTERVAL in dettaglio, dalle basi all’uso avanzato.

Nozioni di base della clausola INTERVAL

La clausola INTERVAL specifica quanto tempo aggiungere o sottrarre da una data di destinazione. È spesso usata con DATE_ADD e DATE_SUB, consentendo operazioni di data potenti con una sintassi concisa.

Sintassi di base:

SELECT date + INTERVAL value unit;
SELECT date - INTERVAL value unit;
  • date : La data o datetime su cui operare.
  • value : Il valore numerico da aggiungere o sottrarre.
  • unit : L’unità dell’operazione (es. DAY, MONTH, YEAR, HOUR, MINUTE, SECOND).

Unità disponibili

Le seguenti unità possono essere usate nella clausola INTERVAL.

UnitDescription
SECONDSeconds
MINUTEMinutes
HOURHours
DAYDays
WEEKWeeks
MONTHMonths
QUARTERQuarters
YEARYears
SECOND_MICROSECONDSeconds and microseconds
MINUTE_MICROSECONDMinutes and microseconds
MINUTE_SECONDMinutes and seconds
HOUR_MICROSECONDHours and microseconds
HOUR_SECONDHours and seconds
HOUR_MINUTEHours and minutes
DAY_MICROSECONDDays and microseconds
DAY_SECONDDays and seconds
DAY_MINUTEDays and minutes
DAY_HOURDays and hours
YEAR_MONTHYears and months

Esempi di base

  1. Aggiungi 1 giorno a una data :
    SELECT '2025-01-01' + INTERVAL 1 DAY;
    

Risultato: 2025-01-02

  1. Sottrai 3 ore da un datetime :
    SELECT '2025-01-01 12:00:00' - INTERVAL 3 HOUR;
    

Risultato: 2025-01-01 09:00:00

  1. Sottrai 10 minuti dal datetime corrente :
    SELECT NOW() - INTERVAL 10 MINUTE;
    
  1. Calcola il primo giorno del mese successivo dalla fine del mese :
    SELECT LAST_DAY('2025-01-01') + INTERVAL 1 DAY;
    

Risultato: Il primo giorno del mese successivo.

Esempi avanzati

  1. Calcolo dell’intervallo di date Calcola l’intervallo per gli ultimi 30 giorni.
    SELECT *
    FROM orders
    WHERE order_date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE();
    
  1. Calcola la data di inizio del prossimo trimestre
    SELECT '2025-01-01' + INTERVAL 1 QUARTER;
    

Risultato: La data di inizio del prossimo trimestre.

  1. Calcolo del tempo consapevole del fuso orario Ottieni il datetime un’ora più tardi calcolato nel fuso orario predefinito del server.
    SELECT CONVERT_TZ(NOW(), 'SYSTEM', '+09:00') + INTERVAL 1 HOUR;
    
  1. Esegui un calcolo più complesso Calcola la data due settimane da oggi e poi ottieni l’ultimo giorno di quel mese.
    SELECT LAST_DAY(CURDATE() + INTERVAL 14 DAY);
    

Note

  1. Fai attenzione al tipo di risultato Il risultato di un calcolo INTERVAL conserva il tipo originale (DATE o DATETIME). Gestisci correttamente i tipi di dati.
  2. Comportamento a fine mese Quando si aggiunge o sottrae a fine mese, MySQL può regolare al fine o all’inizio del mese successivo. Per esempio, aggiungere 1 mese a 2025-01-31 produce 2025-02-28 (anno non bisestile).
  3. Impatto del fuso orario Se fusi orari diversi sono configurati sul server e sul client, i calcoli di data/ora possono spostarsi in modo inatteso.

La clausola INTERVAL è uno strumento chiave per semplificare le operazioni di data in MySQL. Grazie alla sua flessibilità, puoi gestire calcoli di data complessi con facilità. Nella sezione successiva, spiegheremo 6. Esempi pratici.

6. Esempi pratici

L’uso della funzione DATE_ADD di MySQL e della clausola INTERVAL rende i calcoli di data complessi e l’elaborazione dinamica semplici. Questa sezione introduce diversi esempi pratici utili nel lavoro reale.

1. Estrazione di dati entro un periodo specifico

Nell’analisi dei dati e nella reportistica, è comune estrarre record entro un intervallo di tempo specifico.

Esempio 1: Recupera i dati di vendita degli ultimi 30 giorni

SELECT *
FROM sales
WHERE sale_date >= CURDATE() - INTERVAL 30 DAY;

Spiegazione: Estrae i dati a partire dalla data che è 30 giorni prima di oggi.

Esempio 2: Recupera i dati del mese precedente

SELECT *
FROM orders
WHERE order_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 MONTH) AND CURDATE();

Spiegazione: Recupera i dati degli ordini del mese precedente.

2. Impostazione di promemoria per eventi

Puoi impostare notifiche di promemoria basate sulle date di inizio dell’evento o sulle scadenze.

Esempio: Invia una notifica 3 giorni prima dell’inizio di un evento

SELECT event_name, DATE_SUB(event_date, INTERVAL 3 DAY) AS reminder_date
FROM events;

Spiegazione: Calcola la data 3 giorni prima della data dell’evento e la imposta come data di notifica.

3. Gestione delle date di scadenza

Il calcolo delle date di scadenza basato su una data di registrazione è usato in molte applicazioni.

Esempio 1: Calcola una data di scadenza 30 giorni dopo la registrazione

SELECT user_id, registration_date, DATE_ADD(registration_date, INTERVAL 30 DAY) AS expiry_date
FROM users;

Spiegazione: Calcola una data di scadenza 30 giorni dopo la data di registrazione.

Esempio 2: Elimina i dati scaduti

DELETE FROM sessions
WHERE expiry_date < NOW();

Spiegazione: Elimina i dati di sessione scaduti in base alla data/ora corrente.

4. Calcoli di turni e orari

Esempi di aggiustamento degli orari basati su orari di inizio o fine per i programmi di lavoro.

Esempio: Calcola 1 ora prima dell’inizio di un turno

SELECT shift_id, shift_start, DATE_SUB(shift_start, INTERVAL 1 HOUR) AS preparation_time
FROM shifts;

Spiegazione: Calcola 1 ora prima dell’inizio del turno e la visualizza come tempo di preparazione.

5. Calcoli combinando più INTERVAL

Esempi di combinazione di più durate nei calcoli.

Esempio 1: Ottieni l’ultimo giorno del mese un mese da oggi

SELECT LAST_DAY(CURDATE() + INTERVAL 1 MONTH);

Spiegazione: Calcola l’ultimo giorno del mese un mese dopo oggi.

Esempio 2: Aggiungi un periodo di grazia di 3 mesi dopo 1 anno dalla registrazione

SELECT user_id, DATE_ADD(DATE_ADD(registration_date, INTERVAL 1 YEAR), INTERVAL 3 MONTH) AS final_deadline
FROM users;

Spiegazione: Calcola una scadenza finale aggiungendo 1 anno e poi ulteriori 3 mesi dalla data di registrazione.

6. Pulizia e ottimizzazione dei dati

Esempi di ottimizzazione di un database eliminando dati vecchi.

Esempio: Elimina gli utenti che non hanno effettuato l’accesso negli ultimi 90 giorni

DELETE FROM user_activity
WHERE last_login < CURDATE() - INTERVAL 90 DAY;

Spiegazione: Elimina gli utenti il cui ultimo accesso è più vecchio di 90 giorni rispetto a oggi.

Note

  • Convalida i risultati dei calcoli : Presta particolare attenzione ai casi limite come la fine del mese e gli anni bisestili.
  • Assicurati della coerenza dei tipi di dati : Specificare i corretti tipi di data/ora (DATE, DATETIME, ecc.) aiuta a prevenire errori.
  • Considera i fusi orari : Quando operi attraverso diversi fusi orari, usa la funzione CONVERT_TZ().

Applicando DATE_ADD e la clausola INTERVAL, puoi ottimizzare efficientemente le operazioni sulle date nel lavoro reale. Nella sezione successiva, spiegheremo in dettaglio 7. Note e Best Practices.

7. Note e Best Practices

Le operazioni sulle date in MySQL sono estremamente utili, ma quando le usi nel lavoro reale devi comprendere diversi punti chiave e le migliori pratiche. Questa sezione spiega a cosa fare attenzione e come utilizzare le operazioni sulle date in modo efficiente.

Note

1. Coerenza del Tipo di Dato

  • Problema : In MySQL, i risultati possono differire a seconda del tipo di dato usato per le operazioni di data/ora (DATE, DATETIME, TIMESTAMP, ecc.).
  • Esempio :
    SELECT DATE_ADD('2025-01-01', INTERVAL 1 DAY); -- Valid operation
    SELECT DATE_ADD('Invalid Date', INTERVAL 1 DAY); -- Returns NULL for an invalid date
    
  • Contromisura : Convalida che i dati di input siano nel formato corretto in anticipo, e scegli i tipi di dato appropriati.

2. Gestione delle Date Non Valide

  • Problema : I calcoli che coinvolgono la fine del mese o gli anni bisestili possono produrre casi limite difficili.
  • Esempio :
    SELECT DATE_ADD('2025-01-31', INTERVAL 1 MONTH); -- Result: 2025-02-28
    

In questo caso, MySQL si aggiusta automaticamente, ma il risultato può differire da quello previsto.

  • Contromisura : Quando gestisci le date di fine mese, verifica usando la funzione LAST_DAY().
    SELECT LAST_DAY('2025-01-31') + INTERVAL 1 MONTH;
    

3. Considerazioni sui Fusi Orari

  • Problema : Se il fuso orario del server differisce da quello dell’applicazione, possono verificarsi incoerenze nei dati o risultati inattesi.
  • Esempio :
    SELECT NOW(); -- Depends on the server timezone
    
  • Contromisura : Imposta esplicitamente il fuso orario.
    SELECT CONVERT_TZ(NOW(), 'SYSTEM', '+09:00'); -- Convert to Japan time
    

4. Prestazioni nei Calcoli Complessi

  • Problema : Le query con calcoli di data complessi possono influire sulla velocità di esecuzione.
  • Contromisura : Riduci i calcoli non necessari e ottimizza le query usando gli indici.

Migliori Pratiche

1. Usa Formati Standard

  • Mantieni i formati di data coerenti.
  • Formati consigliati: YYYY-MM-DD (DATE), YYYY-MM-DD HH:MM:SS (DATETIME).
  • Esempio :
    SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');
    

2. Combina le Funzioni in Modo Efficace

  • Combinare DATE_ADD/DATE_SUB con LAST_DAY o CURDATE consente calcoli più flessibili.
  • Esempio :
    SELECT LAST_DAY(DATE_ADD(CURDATE(), INTERVAL 1 MONTH));
    

3. Pianifica Attentamente le Operazioni di Data Dinamiche

  • Quando lavori con date dinamiche, suddividi le query e processale passo passo.
  • Esempio :
    SET @next_month = DATE_ADD(CURDATE(), INTERVAL 1 MONTH);
    SELECT LAST_DAY(@next_month);
    

4. Gestisci i Fusi Orari in Sicurezza

  • Mantieni i fusi orari coerenti tra server e client.
  • Esempio :
    SET time_zone = '+09:00';
    

5. Convalida in un Ambiente di Test

  • Testa in anticipo i calcoli di data complessi e i calcoli attraverso diversi fusi orari.

Evita gli Errori Comuni nelle Operazioni di Data

Le operazioni di data sono una competenza importante che può influire significativamente sul design del database e sull’accuratezza delle query. Comprendendo gli errori comuni e seguendo le migliori pratiche, puoi prevenire problemi e ottenere una gestione efficiente dei dati.

8. FAQ

Ecco le domande frequenti (FAQ) sulle operazioni di data in MySQL. Queste risposte si concentrano sui punti comuni che gli utenti da principianti a intermedi spesso si chiedono.

Q1: Qual è la differenza tra DATE_ADD e l’uso dell’operatore + con INTERVAL?

A1:

  • DATE_ADD() è una funzione dedicata per i calcoli di data ed è migliore per la gestione degli errori e la conversione dei tipi.
  • + INTERVAL è più semplice, ma possono verificarsi errori di conversione dei tipi in alcuni casi.

Esempio: Utilizzo di DATE_ADD:

SELECT DATE_ADD('2025-01-01', INTERVAL 1 DAY);

Esempio: Utilizzo dell’operatore + con INTERVAL:

SELECT '2025-01-01' + INTERVAL 1 DAY;

In generale, è consigliato utilizzare DATE_ADD().

Q2: DATE_ADD può aggiungere più intervalli contemporaneamente?

A2:
No. DATE_ADD() può specificare un solo intervallo alla volta. Tuttavia, è possibile annidare più chiamate a DATE_ADD() per ottenere lo stesso effetto.

Esempio: Aggiungere più intervalli:

SELECT DATE_ADD(DATE_ADD('2025-01-01', INTERVAL 1 DAY), INTERVAL 1 MONTH);

Q3: Come posso cambiare il formato della data in MySQL?

A3:
Usa la funzione DATE_FORMAT() per formattare una data/ora come desideri.

Esempio: Conversione di formato:

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS formatted_date;

Risultato: 2025-01-01 12:30:45

Q4: Cosa succede se aggiungo 1 mese a una data di fine mese?

A4:
MySQL regola automaticamente, e il risultato diventa l’ultimo giorno del mese successivo.

Esempio:

SELECT DATE_ADD('2025-01-31', INTERVAL 1 MONTH);

Risultato: 2025-02-28

Questo comportamento è comodo, ma dovresti verificare se corrisponde alla logica che intendi.

Q5: Come eseguire calcoli di data consapevoli del fuso orario?

A5:
Usa la funzione CONVERT_TZ() di MySQL per specificare il fuso orario.

Esempio: Convertire da UTC a ora del Giappone:

SELECT CONVERT_TZ('2025-01-01 12:00:00', 'UTC', '+09:00') AS japan_time;

Q6: Cosa succede se viene specificata una data non valida in DATE_ADD?

A6:
Se viene specificata una data non valida (es. 2025-02-30), MySQL restituisce NULL.

Esempio:

SELECT DATE_ADD('2025-02-30', INTERVAL 1 DAY);

Risultato: NULL

È consigliato convalidare gli input in anticipo.

Q7: Come posso impostare condizioni basate su date passate o future?

A7:
Usa DATE_ADD o DATE_SUB per calcolare una data di riferimento e poi utilizza quel risultato nella clausola WHERE.

Esempio: Recuperare dati degli ultimi 30 giorni:

SELECT * 
FROM sales
WHERE sale_date >= CURDATE() - INTERVAL 30 DAY;

Q8: Quali sono le migliori pratiche quando si usano più fusi orari?

A8:

  • Conserva tutti i dati datetime in UTC .
  • Converte al fuso orario richiesto sul lato client secondo necessità.

Esempio: Salvare i dati in UTC:

SET time_zone = '+00:00';

Q9: Posso gestire separatamente date e orari in MySQL?

A9:
Sì. Usa DATE() o TIME() per estrarre la parte data o ora.

Esempio 1: Estrarre solo la data:

SELECT DATE(NOW());

Esempio 2: Estrarre solo l’ora:

SELECT TIME(NOW());

Q10: Posso usare unità non supportate dalla clausola INTERVAL di MySQL?

A10:
MySQL supporta un insieme fisso di unità INTERVAL. Se ti serve qualcos’altro, convertilo in un’unità supportata appropriata.

9. Riepilogo

Le operazioni su date in MySQL sono una competenza fondamentale per la progettazione e l’operatività del database. Utilizzando DATE_ADD, DATE_SUB e la clausola INTERVAL, è possibile eseguire calcoli di data complessi in modo semplice ed efficiente.

Punti chiave

  1. Nozioni di base sui tipi data/ora :
  • In MySQL, è necessario utilizzare correttamente i tipi data/ora come DATE, DATETIME e TIMESTAMP.
  1. DATE_ADD e DATE_SUB :
  • Funzioni comode per aggiungere o sottrarre date, con operazioni flessibili usando una sintassi semplice.
  1. Clausola INTERVAL :
  • Uno strumento essenziale per calcoli di data efficienti usando unità come anni, mesi, giorni e ore.
  1. Esempi pratici :
  • Utili per molti casi d’uso come estrarre dati passati/futuri, gestire date di scadenza e impostare promemoria.
  1. Note e migliori pratiche :
  • È importante comprendere considerazioni come la coerenza dei tipi di dati, l’impatto dei fusi orari e le regolazioni di fine mese.
  1. FAQ :
  • Fornite soluzioni concrete a domande comuni e problemi che i principianti incontrano spesso.

Prossimi passi

  • Applica ciò che hai imparato :
  • Prova a utilizzare DATE_ADD e DATE_SUB nel tuo progetto per esercitarti con le operazioni sulle date.
  • Progetta tenendo conto dei fusi orari :
  • Nei database che operano su più fusi orari, una gestione accurata dei fusi orari e dei calcoli delle date è fondamentale.
  • Ulteriore ottimizzazione :
  • Progetta query efficienti e utilizza gli indici con l’ottimizzazione delle prestazioni in mente per migliorare le operazioni sui dati.

Padroneggiare le operazioni sulle date in MySQL migliorerà notevolmente l’efficienza nella gestione e nell’analisi dei dati. Usa questo articolo come riferimento e applica attivamente queste competenze pratiche nel tuo lavoro.