SQL – Funzioni Data
La seguente tabella ha una lista di tutte le importanti funzioni relative a Data e Ora disponibili tramite SQL. Ci sono varie altre funzioni supportate dal vostro RDBMS. La lista data è basata su MySQL RDBMS.
Sr.No. | Funzione & Descrizione |
---|---|
1 | ADDDATE()
aggiunge date |
2 | ADDTIME()
aggiunge tempo |
3 | CONVERT_TZ()
Converte da un fuso orario ad un altro |
4 | CURDATE()
Ritorna la data corrente |
5 | CURRENT_DATE(), CURRENT_DATE
Sinonimi di CURDATE() |
6 | CURRENT_TIME(), CURRENT_TIME
Sinonimi di CURTIME() |
7 | CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP
Sinonimi di NOW() |
8 | CURTIME()
Ritorna l’ora corrente |
9 | DATE_ADD()
aggiunge due date |
10 | DATE_FORMAT()
Formatta la data come specificato |
11 | DATE_SUB()
Sottrae due date |
12 | DATE()
Estrae la parte di data di un’espressione data o datetime |
13 | DATEDIFF()
Sottrae due date |
14 | DAY()
Sinonimo per DAYOFMONTH() |
15 | DAYNAME()
Ritorna il nome del giorno della settimana |
16 | DAYOFMONTH()
Ritorna il giorno del mese (1-31) |
17 | DAYOFWEEK()
Ritorna l’indice del giorno della settimana dell argomento |
18 | DAYOFYEAR()
Ritorna il giorno dell’anno (1-366) |
19 | EXTRACT
Estrae parte di una data |
20 | FROM_DAYS()
Converte un numero di giorni in una data |
21 | FROM_UNIXTIME()
Formatta la data come un timestamp UNIX |
22 | HOUR()
Estrae l’ora |
23 | LAST_DAY
Ritorna l’ultimo giorno del mese per l’argomento |
24 | LOCALTIME(), LOCALTIME
Sinonimo di NOW() |
25 | LOCALTIMESTAMP, LOCALTIMESTAMP()
Sinonimo di NOW() |
26 | MAKEDATE()
Crea una data dall’anno e dal giorno dell’anno |
27 | MAKETIME
MAKETIME() |
28 | MICROSECOND()
Ritorna i microsecondi dall’argomento |
29 | MINUTE()
Ritorna i minuti dall’argomento |
30 | MONTH()
Ritorna il mese dalla data passata |
31 | MONTHNAME()
Ritorna il nome del mese |
32 | NOW()
Ritorna la data e l’ora correnti e ora |
33 | PERIOD_ADD()
aggiunge un periodo ad un annomese |
34 | PERIOD_DIFF()
Ritorna il numero di mesi tra i periodi |
35 | QUARTER()
Ritorna il trimestre da un argomento di data |
36 | SEC_TO_TIME()
Converte i secondi in ‘HH:MM:SS’ formato |
37 | SECOND()
Riporta il secondo (0-59) |
38 | STR_TO_DATE()
Converte una stringa in una data |
39 | SUBDATE()
Quando invocato con tre argomenti è un sinonimo di DATE_SUB() |
40 | SUBTIME()
Sottrae tempi |
41 | SYSDATE()
Ritorna l’ora in cui la funzione viene eseguita |
42 | TIME_FORMAT()
Formatta come tempo |
43 | TIME_TO_SEC()
Ritorna l’argomento convertito in secondi |
44 | TIME()
Estrae la parte di tempo dell espressione passata |
45 | TIMEDIFF()
Sottrae il tempo |
46 | TIMESTAMP()
Con un solo argomento questa funzione restituisce l’espressione data o datetime. Con due argomenti, la somma degli argomenti |
47 | TIMESTAMPADD()
aggiunge un intervallo ad un’espressione datetime |
48 | TIMESTAMPDIFF()
Sottrae un intervallo da un’espressione datetime |
49 | TO_DAYS()
Ritorna l’argomento data convertito in giorni |
50 | UNIX_TIMESTAMP()
Ritorna un timestamp UNIX |
51 | UTC_DATE()
Riporta la data corrente UTC |
52 | UTC_TIME()
Riporta l’ora corrente UTC attuale |
53 | UTC_TIMESTAMP()
Ritorna la data e l’ora corrente UTC |
54 | WEEK()
Ritorna il numero della settimana |
55 | WEEKDAY()
Ritorna l’indice del giorno della settimana |
56 | WEEKOFYEAR()
Ritorna la settimana di calendario della data (1-53) |
57 | YEAR()
Ritorna l’anno |
58 | YEARWEEK()
Ritorna l’anno e la settimana |
ADDDATE(date,INTERVALLO expr unità), ADDDATE(expr,giorni)
Quando invocato con la forma INTERVALLO del secondo argomento, ADDDATE() è un sinonimo di DATE_ADD(). La funzione correlata SUBDATE() è un sinonimo di DATE_SUB(). Per informazioni sull’argomento INTERVALLO, vedere la discussione per DATE_ADD().
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);+---------------------------------------------------------+| DATE_ADD('1998-01-02', INTERVAL 31 DAY) |+---------------------------------------------------------+| 1998-02-02 |+---------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);+---------------------------------------------------------+| ADDDATE('1998-01-02', INTERVAL 31 DAY) |+---------------------------------------------------------+| 1998-02-02 |+---------------------------------------------------------+1 row in set (0.00 sec)
Quando viene invocato con la forma days del secondo argomento, MySQL lo tratta come un numero intero di giorni da aggiungere a expr.
mysql> SELECT ADDDATE('1998-01-02', 31);+---------------------------------------------------------+| DATE_ADD('1998-01-02', INTERVAL 31 DAY) |+---------------------------------------------------------+| 1998-02-02 |+---------------------------------------------------------+1 row in set (0.00 sec)
ADDTIME(expr1,expr2)
ADDTIME() aggiunge expr2 a expr1 e restituisce il risultato. L’expr1 è un’espressione di tempo o datetime, mentre l’expr2 è un’espressione di tempo.
mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999','1 1:1:1.000002');+---------------------------------------------------------+| DATE_ADD('1997-12-31 23:59:59.999999','1 1:1:1.000002') |+---------------------------------------------------------+| 1998-01-02 01:01:01.000001 |+---------------------------------------------------------+1 row in set (0.00 sec)
CONVERT_TZ(dt,from_tz,to_tz)
Converte un valore datetime dt dal fuso orario dato da from_tz al fuso orario dato da to_tz e ritorna il valore risultante. Questa funzione restituisce NULL se gli argomenti non sono validi.
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');+---------------------------------------------------------+| CONVERT_TZ('2004-01-01 12:00:00','GMT','MET') |+---------------------------------------------------------+| 2004-01-01 13:00:00 |+---------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');+---------------------------------------------------------+| CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00') |+---------------------------------------------------------+| 2004-01-01 22:00:00 |+---------------------------------------------------------+1 row in set (0.00 sec)
CURDATE()
Ritorna la data corrente come valore nel formato ‘YYYY-MM-DD’ o YYYYMMDD, a seconda che la funzione sia usata in una stringa o in un contesto numerico.
mysql> SELECT CURDATE();+---------------------------------------------------------+| CURDATE() |+---------------------------------------------------------+| 1997-12-15 |+---------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT CURDATE() + 0;+---------------------------------------------------------+| CURDATE() + 0 |+---------------------------------------------------------+| 19971215 |+---------------------------------------------------------+1 row in set (0.00 sec)
CURRENT_DATE e CURRENT_DATE()
CURRENT_DATE e CURRENT_DATE() sono sinonimi di CURDATE()
CURTIME()
Riporta l’ora corrente come valore in ‘HH:MM:SS’ o nel formato HHMMSS, a seconda che la funzione sia usata in una stringa o in un contesto numerico. Il valore è espresso nel fuso orario corrente.
mysql> SELECT CURTIME();+---------------------------------------------------------+| CURTIME() |+---------------------------------------------------------+| 23:50:26 |+---------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT CURTIME() + 0;+---------------------------------------------------------+| CURTIME() + 0 |+---------------------------------------------------------+| 235026 |+---------------------------------------------------------+1 row in set (0.00 sec)
CURRENT_TIME e CURRENT_TIME()
CURRENT_TIME e CURRENT_TIME() sono sinonimi di CURTIME().
CURRENT_TIMESTAMP e CURRENT_TIMESTAMP()
CURRENT_TIMESTAMP e CURRENT_TIMESTAMP() sono sinonimi di NOW().
DATE(expr)
Estrae la parte data dell’espressione data o datetime expr.
mysql> SELECT DATE('2003-12-31 01:02:03');+---------------------------------------------------------+| DATE('2003-12-31 01:02:03') |+---------------------------------------------------------+| 2003-12-31 |+---------------------------------------------------------+1 row in set (0.00 sec)
DATEDIFF(expr1,expr2)
DATEDIFF() restituisce expr1 . expr2 espresso come valore in giorni da una data all’altra. Sia expr1 che expr2 sono espressioni di data o di data e ora. Solo le parti di data dei valori sono usate nel calcolo.
mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');+---------------------------------------------------------+| DATEDIFF('1997-12-31 23:59:59','1997-12-30') |+---------------------------------------------------------+| 1 |+---------------------------------------------------------+1 row in set (0.00 sec)
DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit)
Queste funzioni eseguono l’aritmetica delle date. La data è un valore DATETIME o DATE che specifica la data iniziale. L’expr è un’espressione che specifica il valore dell’intervallo da aggiungere o sottrarre alla data iniziale. L’expr è una stringa; può iniziare con un ‘-‘ per gli intervalli negativi.
Un’unità è una parola chiave che indica le unità in cui l’espressione dovrebbe essere interpretata.
La parola chiave INTERVAL e lo specificatore di unità non sono sensibili alle maiuscole/minuscole.
La seguente tabella mostra la forma attesa dell’argomento expr per ogni valore di unità.
Valore dell’unità | Expected exprFormat | |
---|---|---|
MICROSECONDO | MICROSECONDI | |
SECONDO | SECONDI | |
MINUTI | MINUTI | |
Ora | Ore | |
GIORNO | Giorni | |
SETTIMANA | Settimane | |
MESE | Monti | Monti |
QUARTIERE | QUARTIERI | |
ANNO | ANNI | |
SECONDO_MICROSECONDO | ‘SECONDI.MICROSECONDI’ | |
MINUTI_MICROSECONDO | ‘MINUTI.MICROSECONDI’ | |
MINUTI_SECONDO | ‘MINUTI:SECONDI’ | |
ORA_MICROSECONDO | ‘ORE.MICROSECONDI’ | |
HOUR_SECOND | ‘ORE:MINUTI:SECONDI’ | |
HOUR_MINUTE | ‘ORE:MINUTI’ | |
GIORNO_MICROSECONDO | ‘GIORNI.MICROSECONDI’ | |
DAY_SECOND | ‘GIORNI ORE:MINUTI:SECONDI’ | |
DAY_MINUTE | ‘GIORNI ORE:MINUTI’ | |
DAY_HOUR | ‘GIORNI ORE’ | |
YEAR_MONTH | ‘ANNI-MESI’ |
I valori QUARTER e WEEK sono disponibili dalla versione MySQL 5..0.0.
mysql> SELECT DATE_ADD('1997-12-31 23:59:59', -> INTERVAL '1:1' MINUTE_SECOND);+---------------------------------------------------------+| DATE_ADD('1997-12-31 23:59:59', INTERVAL... |+---------------------------------------------------------+| 1998-01-01 00:01:00 |+---------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 HOUR);+---------------------------------------------------------+| DATE_ADD('1999-01-01', INTERVAL 1 HOUR) |+---------------------------------------------------------+| 1999-01-01 01:00:00 |+---------------------------------------------------------+1 row in set (0.00 sec)
DATE_FORMAT(date,format)
Questo comando formatta il valore della data secondo la stringa di formato. Il carattere ‘%’ è richiesto prima dei caratteri di specificazione del formato.
Sr.No. | Specificatore & Descrizione |
---|---|
1 |
%a Nome abbreviato del giorno della settimana (dom..Sat) |
2 |
%b Nome abbreviato del mese (Jan..Dec) |
3 |
%c Mese, numerico (0..12) |
4 |
%D Giorno del mese con suffisso inglese (0th, 1st, 2nd, 3rd, .) |
5 |
%d giorno del mese, numerico (00..31) |
6 |
%e Giorno del mese, numerico (0…31) |
7 |
%f Microsecondi (000000..999999) |
8 |
%H Ora (00..23) |
9 |
%h Ora (01..12) |
10 |
%I Ora (01..12) |
11 |
%i Minuti, numerico (00..59) |
12 |
%j Giorno dell’anno (001..366) |
13 |
%k Ora (0..23) |
14 |
%l Ora (1..12) |
15 |
%M Nome del mese (gennaio..dicembre) |
16 |
%m Mese, numerico (00..12) |
17 |
%p AM o PM |
18 |
Tempo, 12 ore (hh:mm:ss seguito da AM o PM) |
19 |
%S Secondi (00..59) |
20 |
%s Secondi (00..59) |
21 |
%T Tempo, 24 ore (hh:mm:ss) |
22 |
%U Settimana (00..53), dove la domenica è il primo giorno della settimana |
23 |
%u Settimana (00…53), dove lunedì è il primo giorno della settimana |
24 |
%V Settimana (01..53), dove domenica è il primo giorno della settimana; usato con %X |
25 |
%v Settimana (01..53), dove lunedì è il primo giorno della settimana; usato con %x |
26 |
%W Nome del giorno della settimana (domenica..Sabato) |
27 |
%w Giorno della settimana (0=Domenica.6=Sabato) |
28 |
%X Anno della settimana dove domenica è il primo giorno della settimana, numerico, quattro cifre; usato con %V |
29 |
%x Anno della settimana, dove lunedì è il primo giorno della settimana, numerico, quattro cifre; usato con %v |
30 |
%Y Anno, numerico, quattro cifre |
31 |
%y Anno, numerico (due cifre) |
32 |
%% Un letterale .%. carattere |
33 |
%x x, per qualsiasi.x. non elencati sopra |
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');+---------------------------------------------------------+| DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y') |+---------------------------------------------------------+| Saturday October 1997 |+---------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00' -> '%H %k %I %r %T %S %w');+---------------------------------------------------------+| DATE_FORMAT('1997-10-04 22:23:00....... |+---------------------------------------------------------+| 22 22 10 10:23:00 PM 22:23:00 00 6 |+---------------------------------------------------------+1 row in set (0.00 sec)
DATE_SUB(date,INTERVAL expr unit)
Questa è simile alla funzione DATE_ADD().
DAY(date)
Il DAY() è un sinonimo della funzione DAYOFMONTH().
DAYNAME(date)
Ritorna il nome del giorno della settimana per la data.
mysql> SELECT DAYNAME('1998-02-05');+---------------------------------------------------------+| DAYNAME('1998-02-05') |+---------------------------------------------------------+| Thursday |+---------------------------------------------------------+1 row in set (0.00 sec)
DAYOFMONTH(date)
Ritorna il giorno del mese per la data, nell’intervallo 0-31.
mysql> SELECT DAYOFMONTH('1998-02-03');+---------------------------------------------------------+| DAYOFMONTH('1998-02-03') |+---------------------------------------------------------+| 3 |+---------------------------------------------------------+1 row in set (0.00 sec)
DAYOFWEEK(date)
Ritorna l’indice del giorno della settimana per la data (1 = domenica, 2 = lunedì, ., 7 = sabato). Questi valori di indice corrispondono allo standard ODBC.
mysql> SELECT DAYOFWEEK('1998-02-03');+---------------------------------------------------------+|DAYOFWEEK('1998-02-03') |+---------------------------------------------------------+| 3 |+---------------------------------------------------------+1 row in set (0.00 sec)
DAYOFYEAR(date)
Ritorna il giorno dell’anno per la data, nell’intervallo da 1 a 366.
mysql> SELECT DAYOFYEAR('1998-02-03');+---------------------------------------------------------+| DAYOFYEAR('1998-02-03') |+---------------------------------------------------------+| 34 |+---------------------------------------------------------+1 row in set (0.00 sec)
EXTRACT(unit FROM date)
La funzione EXTRACT() usa gli stessi tipi di specificatori di unità di DATE_ADD() o DATE_SUB(), ma estrae parti dalla data piuttosto che eseguire l’aritmetica della data.
mysql> SELECT EXTRACT(YEAR FROM '1999-07-02');+---------------------------------------------------------+| EXTRACT(YEAR FROM '1999-07-02') |+---------------------------------------------------------+| 1999 |+---------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03');+---------------------------------------------------------+| EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03') |+---------------------------------------------------------+| 199907 |+---------------------------------------------------------+1 row in set (0.00 sec)
FROM_DAYS(N)
Dato un numero di giorni N, restituisce un valore DATE.
mysql> SELECT FROM_DAYS(729669);+---------------------------------------------------------+| FROM_DAYS(729669) |+---------------------------------------------------------+| 1997-10-07 |+---------------------------------------------------------+1 row in set (0.00 sec)
Nota – Usare FROM_DAYS() con cautela su date vecchie. Non è inteso per l’uso con valori che precedono l’avvento del calendario gregoriano (1582).
FROM_UNIXTIME(unix_timestamp,format)
Ritorna una rappresentazione dell’argomento unix_timestamp come valore nel formato ‘YYYY-MM-DD HH:MM:SS o YYYYMMDDHHMMSS, a seconda che la funzione venga usata in una stringa o in un contesto numerico. Il valore è espresso nel fuso orario corrente. L’argomento unix_timestamp è un valore di timestamp interno, prodotto dalla funzione UNIX_TIMESTAMP().
Se il formato è dato, il risultato è formattato secondo la stringa di formato, che è usata nello stesso modo in cui è elencata nella voce per la funzione DATE_FORMAT().
mysql> SELECT FROM_UNIXTIME(875996580);+---------------------------------------------------------+| FROM_UNIXTIME(875996580) |+---------------------------------------------------------+| 1997-10-04 22:23:00 |+---------------------------------------------------------+1 row in set (0.00 sec)
HOUR(time)
Ritorna l’ora per il tempo. L’intervallo del valore di ritorno è da 0 a 23 per i valori dell’ora. Tuttavia, l’intervallo dei valori di TIME è in realtà molto più ampio, quindi HOUR può restituire valori maggiori di 23.
mysql> SELECT HOUR('10:05:03');+---------------------------------------------------------+| HOUR('10:05:03') |+---------------------------------------------------------+| 10 |+---------------------------------------------------------+1 row in set (0.00 sec)
LAST_DAY(date)
Prende un valore di data o datetime e restituisce il valore corrispondente all’ultimo giorno del mese. Restituisce NULL se l’argomento non è valido.
mysql> SELECT LAST_DAY('2003-02-05');+---------------------------------------------------------+| LAST_DAY('2003-02-05') |+---------------------------------------------------------+| 2003-02-28 |+---------------------------------------------------------+1 row in set (0.00 sec)
LOCALTIME e LOCALTIME()
LOCALTIME e LOCALTIME() sono sinonimi di NOW().
LOCALTIMESTAMP e LOCALTIMESTAMP()
LOCALTIMESTAMP e LOCALTIMESTAMP() sono sinonimi di NOW().
MAKEDATE(year,dayofyear)
Risulta una data, dati i valori di year e day-ofyear. Il valore di dayofyear deve essere maggiore di 0 o il risultato sarà NULL.
mysql> SELECT MAKEDATE(2001,31), MAKEDATE(2001,32);+---------------------------------------------------------+| MAKEDATE(2001,31), MAKEDATE(2001,32) |+---------------------------------------------------------+| '2001-01-31', '2001-02-01' |+---------------------------------------------------------+1 row in set (0.00 sec)
MAKETIME(hour,minute,second)
Ritorna un valore temporale calcolato dagli argomenti hour, minute e second.
mysql> SELECT MAKETIME(12,15,30);+---------------------------------------------------------+| MAKETIME(12,15,30) |+---------------------------------------------------------+| '12:15:30' |+---------------------------------------------------------+1 row in set (0.00 sec)
MICROSECOND(expr)
Ritorna i microsecondi dall’espressione di tempo o datetime (expr) come numero nell’intervallo da 0 a 999999.
mysql> SELECT MICROSECOND('12:00:00.123456');+---------------------------------------------------------+| MICROSECOND('12:00:00.123456') |+---------------------------------------------------------+| 123456 |+---------------------------------------------------------+1 row in set (0.00 sec)
MINUTE(time)
Ritorna il minuto del tempo, nell’intervallo da 0 a 59.
mysql> SELECT MINUTE('98-02-03 10:05:03');+---------------------------------------------------------+| MINUTE('98-02-03 10:05:03') |+---------------------------------------------------------+| 5 |+---------------------------------------------------------+1 row in set (0.00 sec)
MONTH(date)
Riporta il mese per la data, nell’intervallo da 0 a 12.
mysql> SELECT MONTH('1998-02-03')+---------------------------------------------------------+| MONTH('1998-02-03') |+---------------------------------------------------------+| 2 |+---------------------------------------------------------+1 row in set (0.00 sec)
MONTHNAME(date)
Riporta il nome completo del mese per una data.
mysql> SELECT MONTHNAME('1998-02-05');+---------------------------------------------------------+| MONTHNAME('1998-02-05') |+---------------------------------------------------------+| February |+---------------------------------------------------------+1 row in set (0.00 sec)
NOW()
Restituisce la data e l’ora correnti come valore nel formato ‘YYYY-MM-DD HH:MM:SS’ o YYYYMMDDHHMMSS, a seconda che la funzione sia usata in un contesto stringa o numerico. Questo valore è espresso nel fuso orario corrente.
mysql> SELECT NOW();+---------------------------------------------------------+| NOW() |+---------------------------------------------------------+| 1997-12-15 23:50:26 |+---------------------------------------------------------+1 row in set (0.00 sec)
PERIOD_ADD(P,N)
aggiunge N mesi a un periodo P (nel formato YYMM o YYYYMM). Restituisce un valore nel formato YYYYMM. Si noti che l’argomento periodo P non è un valore di data.
mysql> SELECT PERIOD_ADD(9801,2);+---------------------------------------------------------+| PERIOD_ADD(9801,2) |+---------------------------------------------------------+| 199803 |+---------------------------------------------------------+1 row in set (0.00 sec)
PERIOD_DIFF(P1,P2)
Ritorna il numero di mesi tra i periodi P1 e P2. Questi periodi P1 e P2 dovrebbero essere nel formato YYMM o YYYYMM. Si noti che gli argomenti del periodo P1 e P2 non sono valori di data.
mysql> SELECT PERIOD_DIFF(9802,199703);+---------------------------------------------------------+| PERIOD_DIFF(9802,199703) |+---------------------------------------------------------+| 11 |+---------------------------------------------------------+1 row in set (0.00 sec)
QUARTER(date)
Riporta il trimestre dell’anno per la data, nell’intervallo da 1 a 4.
mysql> SELECT QUARTER('98-04-01');+---------------------------------------------------------+| QUARTER('98-04-01') |+---------------------------------------------------------+| 2 |+---------------------------------------------------------+1 row in set (0.00 sec)
SECONDO(ora)
Ritorna il secondo per l’ora, nell’intervallo da 0 a 59.
mysql> SELECT SECOND('10:05:03');+---------------------------------------------------------+| SECOND('10:05:03') |+---------------------------------------------------------+| 3 |+---------------------------------------------------------+1 row in set (0.00 sec)
SEC_TO_TIME(seconds)
Ritorna l’argomento secondi, convertito in ore, minuti e secondi, come valore nel formato ‘HH:MM:SS’ o HHMMSS, a seconda che la funzione sia usata in un contesto stringa o numerico.
mysql> SELECT SEC_TO_TIME(2378);+---------------------------------------------------------+| SEC_TO_TIME(2378) |+---------------------------------------------------------+| 00:39:38 |+---------------------------------------------------------+1 row in set (0.00 sec)
STR_TO_DATE(str,format)
Questa è l’inverso della funzione DATE_FORMAT(). Prende una stringa str e una stringa format. La funzione STR_TO_DATE() restituisce un valore DATETIME se la stringa di formato contiene sia la data che l’ora. Altrimenti, restituisce un valore DATE o TIME se la stringa contiene solo parti di data o ora.
mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');+---------------------------------------------------------+| STR_TO_DATE('04/31/2004', '%m/%d/%Y') |+---------------------------------------------------------+| 2004-04-31 |+---------------------------------------------------------+1 row in set (0.00 sec)
SUBDATE(date,INTERVALLO unità expr) e SUBDATE(expr,giorni)
Quando invocato con la forma INTERVALLO del secondo argomento, SUBDATE() è un sinonimo di DATE_SUB(). Per informazioni sull’argomento INTERVAL, consultate la discussione per DATE_ADD().
mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);+---------------------------------------------------------+| DATE_SUB('1998-01-02', INTERVAL 31 DAY) |+---------------------------------------------------------+| 1997-12-02 |+---------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT SUBDATE('1998-01-02', INTERVAL 31 DAY);+---------------------------------------------------------+| SUBDATE('1998-01-02', INTERVAL 31 DAY) |+---------------------------------------------------------+| 1997-12-02 |+---------------------------------------------------------+1 row in set (0.00 sec)
SUBTIME(expr1,expr2)
La funzione SUBTIME() restituisce expr1 . expr2 espresso come un valore nello stesso formato di expr1. Il valore expr1 è un’espressione di tempo o di data, mentre il valore expr2 è un’espressione di tempo.
mysql> SELECT SUBTIME('1997-12-31 23:59:59.999999', -> '1 1:1:1.000002');+---------------------------------------------------------+| SUBTIME('1997-12-31 23:59:59.999999'... |+---------------------------------------------------------+| 1997-12-30 22:58:58.999997 |+---------------------------------------------------------+1 row in set (0.00 sec)
SYSDATE()
Ritorna la data e l’ora correnti come valore nel formato ‘YYYY-MM-DD HH:MM:SS’ o YYYYMMDDHHMMSS, a seconda che la funzione sia usata in una stringa o in un contesto numerico.
mysql> SELECT SYSDATE();+---------------------------------------------------------+| SYSDATE() |+---------------------------------------------------------+| 2006-04-12 13:47:44 |+---------------------------------------------------------+1 row in set (0.00 sec)
TIME(expr)
Estrae la parte di tempo dell’espressione expr time o datetime e la restituisce come stringa.
mysql> SELECT TIME('2003-12-31 01:02:03');+---------------------------------------------------------+| TIME('2003-12-31 01:02:03') |+---------------------------------------------------------+| 01:02:03 |+---------------------------------------------------------+1 row in set (0.00 sec)
TIMEDIFF(expr1,expr2)
La funzione TIMEDIFF() restituisce expr1 . expr2 espresso come valore temporale. Questi valori expr1 ed expr2 sono espressioni di tempo o data e ora, ma entrambi devono essere dello stesso tipo.
mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001', -> '1997-12-30 01:01:01.000002');+---------------------------------------------------------+| TIMEDIFF('1997-12-31 23:59:59.000001'..... |+---------------------------------------------------------+| 46:58:57.999999 |+---------------------------------------------------------+1 row in set (0.00 sec)
TIMESTAMP(expr), TIMESTAMP(expr1,expr2)
Con un solo argomento, questa funzione restituisce l’espressione data o datetime expr come valore datetime. Con due argomenti, aggiunge l’espressione temporale expr2 all’espressione data o datetime expr1 e restituisce il risultato come valore datetime.
mysql> SELECT TIMESTAMP('2003-12-31');+---------------------------------------------------------+| TIMESTAMP('2003-12-31') |+---------------------------------------------------------+| 2003-12-31 00:00:00 |+---------------------------------------------------------+1 row in set (0.00 sec)
TIMESTAMPADD(unit,interval,datetime_expr)
Questa funzione aggiunge l’espressione intera intervallo all’espressione datetime_expr. L’unità per l’intervallo è data dall’argomento unit, che dovrebbe essere uno dei seguenti valori –
- FRAC_SECOND
- SECOND, MINUTE
- HOUR, GIORNO
- SETTIMANA
- MESE
- QUARTO o
- ANNO
Il valore dell’unità può essere specificato usando una delle parole chiave come mostrato o con un prefisso SQL_TSI_.
Per esempio, DAY e SQL_TSI_DAY sono entrambi legali.
mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');+---------------------------------------------------------+| TIMESTAMPADD(MINUTE,1,'2003-01-02') |+---------------------------------------------------------+| 2003-01-02 00:01:00 |+---------------------------------------------------------+1 row in set (0.00 sec)
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
Risulta la differenza intera tra le espressioni datetime_expr1 e datetime_expr2. L’unità per il risultato è data dall’argomento unit. I valori legali per l’unità sono gli stessi elencati nella descrizione della funzione TIMESTAMPADD().
mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');+---------------------------------------------------------+| TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01') |+---------------------------------------------------------+| 3 |+---------------------------------------------------------+1 row in set (0.00 sec)
TIME_FORMAT(time,format)
Questa funzione è usata come la funzione DATE_FORMAT(), ma la stringa di formato può contenere specificatori di formato solo per ore, minuti e secondi.
Se il valore dell’ora contiene una parte di ora maggiore di 23, gli specificatori di formato dell’ora %H e %k producono un valore più grande del solito intervallo da 0 a 23. Gli altri specificatori di formato ora producono il valore dell’ora modulo 12.
mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');+---------------------------------------------------------+| TIME_FORMAT('100:00:00', '%H %k %h %I %l') |+---------------------------------------------------------+| 100 100 04 04 4 |+---------------------------------------------------------+1 row in set (0.00 sec)
TIME_TO_SEC(time)
Ritorna l’argomento tempo convertito in secondi.
mysql> SELECT TIME_TO_SEC('22:23:00');+---------------------------------------------------------+| TIME_TO_SEC('22:23:00') |+---------------------------------------------------------+| 80580 |+---------------------------------------------------------+1 row in set (0.00 sec)
TO_DAYS(date)
Data una data, restituisce un numero di giorni (il numero di giorni dall’anno 0).
mysql> SELECT TO_DAYS(950501);+---------------------------------------------------------+| TO_DAYS(950501) |+---------------------------------------------------------+| 728779 |+---------------------------------------------------------+1 row in set (0.00 sec)
UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)
Se chiamata senza argomenti, questa funzione restituisce un timestamp Unix (secondi dal ‘1970-01-01 00:00:00’ UTC) come intero senza segno. Se UNIX_TIMESTAMP() è chiamata con un argomento di data, restituisce il valore dell’argomento come secondi dal ‘1970-01-01 00:00:00’ UTC. date può essere una stringa DATE, una stringa DATETIME, un TIMESTAMP, o un numero nel formato YYMMDD o YYYYMMDD.
mysql> SELECT UNIX_TIMESTAMP();+---------------------------------------------------------+| UNIX_TIMESTAMP() |+---------------------------------------------------------+| 882226357 |+---------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');+---------------------------------------------------------+| UNIX_TIMESTAMP('1997-10-04 22:23:00') |+---------------------------------------------------------+| 875996580 |+---------------------------------------------------------+1 row in set (0.00 sec)
UTC_DATE, UTC_DATE()
Ritorna la data corrente UTC come valore nel formato ‘YYYY-MM-DD’ o YYYYMMDD, a seconda che la funzione sia usata in un contesto stringa o numerico.
mysql> SELECT UTC_DATE(), UTC_DATE() + 0;+---------------------------------------------------------+| UTC_DATE(), UTC_DATE() + 0 |+---------------------------------------------------------+| 2003-08-14, 20030814 |+---------------------------------------------------------+1 row in set (0.00 sec)
UTC_TIME, UTC_TIME()
Ritorna l’ora UTC corrente come valore nel formato ‘HH:MM:SS’ o HHMMSS, a seconda che la funzione sia usata in un contesto stringa o numerico.
mysql> SELECT UTC_TIME(), UTC_TIME() + 0;+---------------------------------------------------------+| UTC_TIME(), UTC_TIME() + 0 |+---------------------------------------------------------+| 18:07:53, 180753 |+---------------------------------------------------------+1 row in set (0.00 sec)
UTC_TIMESTAMP, UTC_TIMESTAMP()
Ritorna la data e l’ora UTC corrente come valore in ‘YYYY-MM-DD HH:MM:SS’ o in formato YYYYMMDDHHMMSS, a seconda che la funzione sia usata in un contesto stringa o numerico.
mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;+---------------------------------------------------------+| UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0 |+---------------------------------------------------------+| 2003-08-14 18:08:04, 20030814180804 |+---------------------------------------------------------+1 row in set (0.00 sec)
WEEK(date)
Questa funzione restituisce il numero della settimana per la data. La forma a due argomenti di SETTIMANA() vi permette di specificare se la settimana inizia di domenica o di lunedì e se il valore di ritorno deve essere nell’intervallo da 0 a 53 o da 1 a 53. Se l’argomento mode è omesso, viene utilizzato il valore della variabile di sistema default_week_format
Mode | Primo giorno della settimana | Intervallo | La settimana 1 è la prima settimana. | |
---|---|---|---|---|
0 | Domenica | 0-53 | con una domenica in questo anno | |
1 | Lunedì | 0-53 | con più di 3 giorni quest’anno | |
2 | Domenica | 1-53 | con una domenica in questo anno | |
3 | Lunedì | 1-53 | con più di 3 giorni quest’anno | |
4 | Domenica | 0-53 | con più di 3 giorni quest’anno | |
5 | Lunedì | 0-53 | con un lunedì in questo anno | |
6 | Domenica | 1-53 | con più di 3 giorni quest’anno | |
7 | Lunedì | 1-53 | con un lunedì in questo anno |
mysql> SELECT WEEK('1998-02-20');+---------------------------------------------------------+| WEEK('1998-02-20') |+---------------------------------------------------------+| 7 |+---------------------------------------------------------+1 row in set (0.00 sec)
WEEKDAY(date)
Risulta l’indice del giorno della settimana per la data (0 = lunedì, 1 = Martedì, . 6 = domenica).
mysql> SELECT WEEKDAY('1998-02-03 22:23:00');+---------------------------------------------------------+| WEEKDAY('1998-02-03 22:23:00') |+---------------------------------------------------------+| 1 |+---------------------------------------------------------+1 row in set (0.00 sec)
WEEKOFYEAR(date)
Ritorna la settimana di calendario della data come numero nell’intervallo da 1 a 53. WEEKOFYEAR() è una funzione di compatibilità che equivale a WEEK(date,3).
mysql> SELECT WEEKOFYEAR('1998-02-20');+---------------------------------------------------------+| WEEKOFYEAR('1998-02-20') |+---------------------------------------------------------+| 8 |+---------------------------------------------------------+1 row in set (0.00 sec)
YEAR(date)
Risulta l’anno per la data, nell’intervallo da 1000 a 9999, o 0 per il .zero. date.
mysql> SELECT YEAR('98-02-03');+---------------------------------------------------------+| YEAR('98-02-03') |+---------------------------------------------------------+| 1998 |+---------------------------------------------------------+1 row in set (0.00 sec)
YEARWEEK(date), YEARWEEK(date,mode)
Risulta l’anno e la settimana per una data. L’argomento mode funziona esattamente come l’argomento mode della funzione WEEK(). L’anno nel risultato può essere diverso dall’anno nell’argomento data per la prima e l’ultima settimana dell’anno.
mysql> SELECT YEARWEEK('1987-01-01');+---------------------------------------------------------+| YEAR('98-02-03')YEARWEEK('1987-01-01') |+---------------------------------------------------------+| 198653 |+---------------------------------------------------------+1 row in set (0.00 sec)
Nota – Il numero della settimana è diverso da quello che la funzione WEEK() restituirebbe (0) per gli argomenti opzionali 0 o 1, poiché WEEK() restituisce quindi la settimana nel contesto dell’anno dato.