Lavorare con frazioni temporali
Gli argomenti di questa pagina
- Le funzioni DAY(), MONTH(), YEAR(), HOUR(), MINUTE(), SECOND()
- Estrazione di frazioni temporali
- Calcoli su campi temporali con frazioni temporali
- Calcolare il giorno della settimana con DAYOFWEEK() e ELT()
- Verificare una scadenza
|
Le funzioni DAY(), MONTH(), YEAR(), HOUR(), MINUTE(), SECOND()
come abbiamo visto in "Elenco funzioni Data Ora" ci sono alcune funzioni MYSQL utili per estrerre porzioni di dati temporali.
Le funzioni che vedremo in questa pagina sono: DAY(), MONTH(), YEAR(), HOUR(), MINUTE(), SECOND() che tra tutte le funzioni, forse sono le più utili.
Il loro utilizzo si può prestare a molteplici usi:
- estrazione di frazioni temporali da un campo DATA o TIME o DATATIME
- calcoli cu campi temporali
- creazione di Query complesse.
Le tabelle in esame sono sql_lib_prestiti e sql_ore_lavorative con i record mostrati qui di seguito:
10 record letti
id |
id_libro |
id_iscritto |
data_prestito |
data_restituzione |
1 |
2 |
5 |
2014-04-01 |
2014-04-15 |
2 |
8 |
21 |
2014-03-29 |
2014-04-09 |
3 |
20 |
12 |
2014-05-02 |
NULL |
4 |
15 |
78 |
2014-02-13 |
NULL |
5 |
2 |
34 |
2014-04-19 |
NULL |
6 |
5 |
11 |
2014-01-20 |
NULL |
7 |
5 |
36 |
2013-03-15 |
2013-04-19 |
8 |
10 |
52 |
2013-02-02 |
NULL |
9 |
9 |
41 |
2012-01-01 |
2013-04-10 |
10 |
21 |
34 |
2014-03-10 |
2014-04-09 |
|
8 record letti
id |
nome |
data_entra |
data_esce |
data_start |
data_end |
1 |
Migliavacca Luigi |
2011-09-08 |
2011-09-08 |
2011-09-08 10:00:00 |
2011-09-08 15:00:00 |
2 |
Rizzi Carlo |
2011-09-08 |
2011-09-08 |
2011-09-08 08:00:00 |
2011-09-08 14:00:00 |
3 |
Liberali Franca |
2011-09-07 |
2011-09-08 |
2011-09-07 22:40:00 |
2011-09-08 08:00:00 |
4 |
Di Maggio Mario |
2011-09-08 |
2011-09-08 |
2011-09-08 13:59:00 |
2011-09-08 22:30:00 |
5 |
Scicchitano Andrea |
2013-10-13 |
2013-10-13 |
2013-10-13 07:05:00 |
2013-10-13 14:15:00 |
6 |
Edelvisi Maurizio |
2013-10-13 |
2013-10-13 |
2013-10-13 13:58:00 |
2013-10-13 21:05:00 |
7 |
Gerardini Silvano |
2013-10-13 |
2013-10-14 |
2013-10-13 20:58:00 |
2013-10-14 07:05:00 |
8 |
Pasotti Alessio |
2013-10-14 |
2013-10-14 |
2013-10-14 06:43:00 |
2013-10-14 14:11:00 |
|
Estrazione di frazioni temporali
Mostra il giorno, il mese e l'anno dei prestiti
1
2
3
4
5
6
7
8
9
|
<?php $Query = "SELECT DATE_FORMAT( data_prestito, '%d-%m-%Y' ) AS data_orig, DAY( data_prestito ) AS giorno, MONTH( data_prestito ) AS mese, YEAR( data_prestito ) AS anno FROM sql_lib_prestiti "; ?>
|
|
10 record letti
data_orig |
giorno |
mese |
anno |
01-04-2014 |
1 |
4 |
2014 |
29-03-2014 |
29 |
3 |
2014 |
02-05-2014 |
2 |
5 |
2014 |
13-02-2014 |
13 |
2 |
2014 |
19-04-2014 |
19 |
4 |
2014 |
20-01-2014 |
20 |
1 |
2014 |
15-03-2013 |
15 |
3 |
2013 |
02-02-2013 |
2 |
2 |
2013 |
01-01-2012 |
1 |
1 |
2012 |
10-03-2014 |
10 |
3 |
2014 |
|
Mostra il giorno, il mese e l'anno delle restituzioni
1
2
3
4
5
6
7
8
9
10
|
<?php $Query = "SELECT DATE_FORMAT( data_restituzione, '%d-%m-%Y' ) AS data_orig, DAY( data_restituzione ) AS giorno, MONTH( data_restituzione ) AS mese, YEAR( data_restituzione ) AS anno FROM sql_lib_prestiti WHERE data_restituzione IS NOT NULL "; ?>
|
|
5 record letti
data_orig |
giorno |
mese |
anno |
15-04-2014 |
15 |
4 |
2014 |
09-04-2014 |
9 |
4 |
2014 |
19-04-2013 |
19 |
4 |
2013 |
10-04-2013 |
10 |
4 |
2013 |
09-04-2014 |
9 |
4 |
2014 |
|
Mostra le ore, minuti e secondi della data ora ingresso
1
2
3
4
5
6
7
8
9
|
<?php $Query = "SELECT nome, DATE_FORMAT( data_start, '%d-%m-%Y %k:%i:%s' ) AS data_orig, HOUR( data_start ) AS ore, MINUTE( data_start ) AS minuti, SECOND( data_start ) AS secondi FROM sql_ore_lavorative "; ?>
|
|
8 record letti
nome |
data_orig |
ore |
minuti |
secondi |
Migliavacca Luigi |
08-09-2011 10:00:00 |
10 |
0 |
0 |
Rizzi Carlo |
08-09-2011 8:00:00 |
8 |
0 |
0 |
Liberali Franca |
07-09-2011 22:40:00 |
22 |
40 |
0 |
Di Maggio Mario |
08-09-2011 13:59:00 |
13 |
59 |
0 |
Scicchitano Andrea |
13-10-2013 7:05:00 |
7 |
5 |
0 |
Edelvisi Maurizio |
13-10-2013 13:58:00 |
13 |
58 |
0 |
Gerardini Silvano |
13-10-2013 20:58:00 |
20 |
58 |
0 |
Pasotti Alessio |
14-10-2013 6:43:00 |
6 |
43 |
0 |
|
Calcoli su campi temporali con frazioni temporali
Aggiungi giorni, mesi o anni alla data in esame
1
2
3
4
5
6
7
8
9
|
<?php $Query = "SELECT DATE_FORMAT( data_prestito, '%d-%m-%Y' ) AS data_orig, DATE_FORMAT( DATE_ADD(data_prestito,INTERVAL 90 DAY), '%d-%m-%Y' ) AS day_add, DATE_FORMAT( DATE_ADD(data_prestito,INTERVAL 4 MONTH), '%d-%m-%Y' ) AS mont_add, DATE_FORMAT( DATE_ADD(data_prestito,INTERVAL 4 YEAR), '%d-%m-%Y' ) AS year_add FROM sql_lib_prestiti "; ?>
|
|
10 record letti
data_orig |
day_add |
mont_add |
year_add |
01-04-2014 |
30-06-2014 |
01-08-2014 |
01-04-2018 |
29-03-2014 |
27-06-2014 |
29-07-2014 |
29-03-2018 |
02-05-2014 |
31-07-2014 |
02-09-2014 |
02-05-2018 |
13-02-2014 |
14-05-2014 |
13-06-2014 |
13-02-2018 |
19-04-2014 |
18-07-2014 |
19-08-2014 |
19-04-2018 |
20-01-2014 |
20-04-2014 |
20-05-2014 |
20-01-2018 |
15-03-2013 |
13-06-2013 |
15-07-2013 |
15-03-2017 |
02-02-2013 |
03-05-2013 |
02-06-2013 |
02-02-2017 |
01-01-2012 |
31-03-2012 |
01-05-2012 |
01-01-2016 |
10-03-2014 |
08-06-2014 |
10-07-2014 |
10-03-2018 |
|
Calcolare il giorno della settimana con DAYOFWEEK() e ELT()
Nei due esempi che seguono faccio uso di due funzioni:
- DAYOFWEEK che restituisce il numero della settimanda della data in esame
- ELT che restituisce una stringa indicata da un numero
La funzione MYSQL ELT() restituisce la stringa che, nella lista degli argomenti stringa (assimilabile ad un ARRAY), occupa la posizione indicata da un numero.
Il numero indicato come primo argomento della funzione infatti è un indice che serve per prelevare la stringa che occupa la posizione indicata dal numero.
La sintassi per la funzione MYSQL ELT():
ELT(N,Str1, Str2, Str3,...);
Dall'associazione delle due funzioni:
- con DAYOFWEEK() viene estratto il numero relativo al giorno della data indicata
- con ELT() viene prelevato il numero fornito da DAYOFWEEK() che serve ad estrarre una stringa dall'elenco di stringhe fornite per ottenere il giorno della settimana in italiano
Mostra in che giorno della settimanda cade una data
1
2
3
4
5
6
7
8
|
<?php $Query1 = "SELECT DATE_FORMAT( CURDATE(), '%d-%m-%Y' ) AS data_odierna , DAYOFWEEK(CURDATE()) AS Giorno "; $Query2 = "SELECT DATE_FORMAT( CURDATE(), '%d-%m-%Y' ) AS data_odierna , ELT(DAYOFWEEK(CURDATE()),'dom','lun','mar','mer','gio','ven','sab') AS Giorno "; ?>
|
|
1 record letti
data_odierna |
Giorno |
04-07-2022 |
2 |
1 record letti
data_odierna |
Giorno |
04-07-2022 |
lun |
|
Mostra in che giorno della settimana sono nati i miei contatti
1
2
3
4
5
6
7
|
<?php // data_nascita sql_agenda $Query = "SELECT DATE_FORMAT( data_nascita, '%d-%m-%Y' ) AS data_nascita, ELT(DAYOFWEEK(data_nascita),'dom','lun','mar','mer','gio','ven','sab') AS Giorno FROM sql_agenda "; ?>
|
|
103 record trovati
15 record visualizzati
data_nascita |
Giorno |
22-01-2004 |
gio |
22-11-2007 |
gio |
20-08-2004 |
ven |
21-05-2009 |
gio |
12-01-1997 |
dom |
02-07-1987 |
gio |
12-08-2009 |
mer |
14-11-1987 |
sab |
26-07-1987 |
dom |
25-01-1987 |
dom |
26-06-1988 |
dom |
19-07-1987 |
dom |
10-05-2009 |
dom |
08-08-1999 |
dom |
20-03-2002 |
mer |
... |
... |
|
Verificare una scadenza
controlla i libri prestati da più di 90 giorni ed ancora non restituiti
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<?php $Query = "SELECT sql_lib_prestiti.id, sql_agenda.cognome, sql_agenda.nome, sql_libri.Titolo, DATE_FORMAT( sql_lib_prestiti.data_prestito, '%d-%m-%Y' ) AS Prestato , DATE_FORMAT( DATE_ADD( sql_lib_prestiti.data_prestito, INTERVAL 90 DAY ), '%d-%m-%Y' ) AS scadenza, DATE_FORMAT( CURDATE( ), '%d-%m-%Y' ) AS oggi FROM sql_lib_prestiti INNER JOIN sql_libri ON sql_libri.id = sql_lib_prestiti.id_libro INNER JOIN sql_agenda ON sql_agenda.id = sql_lib_prestiti.id_iscritto WHERE sql_lib_prestiti.data_restituzione IS NULL AND DATE_ADD( sql_lib_prestiti.data_prestito, INTERVAL 90 DAY ) < CURDATE( ) "; ?>
|
|
5 record letti
id |
cognome |
nome |
Titolo |
Prestato |
scadenza |
oggi |
3 |
Borsotti |
Mirella |
Poser 4 Pro |
02-05-2014 |
31-07-2014 |
04-07-2022 |
4 |
Alama |
Ornella |
CorelDRAW |
13-02-2014 |
14-05-2014 |
04-07-2022 |
5 |
Basilio |
Davide |
Macromedia Flash 6 |
19-04-2014 |
18-07-2014 |
04-07-2022 |
6 |
Curti |
Oreste |
Adobe Photoshop 7.0 |
20-01-2014 |
20-04-2014 |
04-07-2022 |
8 |
Alcantara |
Pinuccia |
Adobe Digital Video Collection |
02-02-2013 |
03-05-2013 |
04-07-2022 |
|
controlla i libri prestati, non restituiti ma ancora non scaduti
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<?php $Query = "SELECT sql_lib_prestiti.id, sql_agenda.cognome, sql_agenda.nome, sql_libri.Titolo, DATE_FORMAT( sql_lib_prestiti.data_prestito, '%d-%m-%Y' ) AS Prestato , DATE_FORMAT( DATE_ADD( sql_lib_prestiti.data_prestito, INTERVAL 90 DAY ), '%d-%m-%Y' ) AS scadenza, DATE_FORMAT( CURDATE( ), '%d-%m-%Y' ) AS oggi FROM sql_lib_prestiti INNER JOIN sql_libri ON sql_libri.id = sql_lib_prestiti.id_libro INNER JOIN sql_agenda ON sql_agenda.id = sql_lib_prestiti.id_iscritto WHERE sql_lib_prestiti.data_restituzione IS NULL AND DATE_ADD( sql_lib_prestiti.data_prestito, INTERVAL 90 DAY ) >= CURDATE( ) "; ?>
|
|
Nessun record restituito
|