Funzioni DATE_ADD() e DATE_SUB()
Gli argomenti di questa pagina
|
Definizione e sintassi delle funzioni DATE_ADD() e DATE_SUB()
La funzione DATE_ADD(), sinonimo della funzione ADDDATE(), aggiunge uno specificato intervallo di tempo ad una data, mentre la funzione DATE_SUB(), sinonimo della funzione SUBDATE(), toglie uno specificato intervallo di tempo ad una data. Queste funzioni eseguono dei calcoli aritmetici sulle date.
Generalmente queste funzioni vengono invocate con la parola chiave INTERVAL. La parola chiave INTERVAL e l'unità identificatore non sono case sensitive.
La sintassi è semplice:
DATE_SUB(date,INTERVAL expr tipo)
Il primo argomento data specifica una data o un qualsiasi valore datetime di partenza.
INTERVAL è una parola chiave che precede ed indica le unità su cui operare il calcolo
expr è un numero di un intervallo che si vuole aggiungere o sottraare
Il tipo da dare come INTERVAL è elencato qui di seguito.
Elenco degli argomenti utilizzabili con le funzioni DATE_ADD() e DATE_SUB()
# | Unità di tempo | Formato atteso |
---|---|---|
1 | MICROSECOND | MICROSECONDI |
2 | SECOND | SECONDI |
3 | MINUTE | MINUTI |
4 | HOUR | ORE |
5 | DAY | GIORNI |
6 | WEEK | SETTIMANE |
7 | MONTH | MESI |
8 | QUARTER | TRIMESTRI |
9 | YEAR | ANNI |
10 | SECOND_MICROSECOND | SECONDI MICROSECONDI |
11 | MINUTE_MICROSECOND | MINUTI MICROSECONDI |
12 | MINUTE_SECOND | MINUTI SECONDI |
13 | HOUR_MICROSECOND | ORE MICROSECONDI |
14 | HOUR_SECOND | ORE: MINUTI: SECONDI |
15 | HOUR_MINUTE | ORE: MINUTI |
16 | DAY_MICROSECOND | GIORNI.MICROSECONDI |
17 | DAY_SECOND | GIORNI ORE: MINUTI: SECONDI |
18 | DAY_MINUTE | GIORNI ORE: MINUTI |
19 | DAY_HOUR | ORE GIORNI |
20 | YEAR_MONTH | ANNI-MESI |
Seguono alcuni esempi di utilizzo di queste due funzioni
In questo ed in altri esempi di questo genere la funzione DATE_ADD() è nidificata nell'altra funzione DATE_FORMAT() per ottenerne il risultato nel formato gg-mm-aaaa.
Se non si adottasse questo sistema di nidificazione e si volesse usare la sola funzione DATE_ADD() otterremo la data nel formato con cui è memorizzata nel DB, ossia aaaa-mm-gg.
In questo esempio vengono aggiunti 10 giorni alla data letta nel DB
esempio 1
|
101 record trovati 15 record visualizzati
|
Questo esempio è l'inverso di quello appena visto: alla data letta vengono tolti 10 giorni
esempio 2
|
101 record trovati 15 record visualizzati
|
In questo terzo esempio uso entrambe le funzioni: DATE_SUB e DATE_ADD ed agisco sui mesi anzichè sui giorni.
esempio 3
|
101 record trovati 15 record visualizzati
|
Ed ora vediamo come aggiungere le ore
esempio 4
|
|||||||||||||||||||||||||||
8 record trovati 8 record visualizzati
|
Riepilogo
Ora nella tabella sottostante una carrellata di esempi sulle due (quattro comprese le funzioni equivalenti) funzioni MYSQL DATE_SUB e DATE_ADD.
Quando vediamo nella colonna dei risultati "Problema con Query", salvo reali errori nella Query stessa (qui esclusi perchè pazientemente testati), osservando la data indicata nella Query, noteremo che la stessa non è corretta: 2006-07-00, 2005-03-32.
Il messaggio di errore inserito sostituisce l'eventuale valore NULL restituito dalla Query.
Una serie di Query veloci
1 | SELECT DATE_ADD(curdate(), INTERVAL 1 HOUR) AS data | 2022-05-29 01:00:00 |
2 | SELECT DATE_ADD(curdate(), INTERVAL 1 DAY) AS data | 2022-05-30 |
3 | SELECT DATE_ADD(curdate(), INTERVAL '1.1' YEAR_MONTH) AS data | 2023-06-29 |
4 | SELECT DATE_ADD('1997-12-31 23:59:59', INTERVAL 1 DAY) AS data | 1998-01-01 23:59:59 |
5 | SELECT DATE_ADD('1997-02-28 23:59:59', INTERVAL 8 DAY) AS data | 1997-03-08 23:59:59 |
6 | SELECT DATE_ADD('1997-12-31 23:59:59', INTERVAL 1 MINUTE) AS data | 1998-01-01 00:00:59 |
7 | SELECT DATE_ADD('2005-07-19 08:40:10', INTERVAL '1:5' HOUR_MINUTE) AS data | 2005-07-19 09:45:10 |
8 | SELECT DATE_ADD('2006-07-01', INTERVAL 1 DAY) AS DATA | 2006-07-02 |
9 | SELECT ADDDATE('2006-07-01', INTERVAL 1 DAY) AS DATA | 2006-07-02 |
10 | SELECT DATE_ADD('1999-01-01', INTERVAL 1 HOUR) AS DATA | 1999-01-01 01:00:00 |
11 | SELECT DATE_ADD('2006-07-00', INTERVAL 1 DAY) AS DATA | Problema con Query |
12 | SELECT '2005-03-32' + INTERVAL 1 DAY AS data | Problema con Query |
13 | SELECT '2005-07-19' + INTERVAL 1 DAY AS data | 2005-07-20 |
14 | SELECT DATE_SUB(curdate(), INTERVAL 1 HOUR) AS data | 2022-05-28 23:00:00 |
15 | SELECT DATE_SUB(curdate(), INTERVAL 1 DAY) AS data | 2022-05-28 |
16 | SELECT DATE_SUB(curdate(), INTERVAL 1 WEEK) AS data | 2022-05-22 |
17 | SELECT DATE_SUB(curdate(), INTERVAL 1 MONTH) AS data | 2022-04-29 |
18 | SELECT DATE_SUB(curdate(), INTERVAL '1.1' YEAR_MONTH) AS data | 2021-04-29 |
19 | SELECT DATE_SUB('1997-12-31 00:00:00', INTERVAL 1 MINUTE) AS data | 1997-12-30 23:59:00 |
20 | SELECT DATE_SUB(curdate(),interval 67 year) AS data | 1955-05-29 |
21 | SELECT DATE_SUB('2005-07-19 10:50:10', INTERVAL '1:5' HOUR_MINUTE) AS data | 2005-07-19 09:45:10 |