Articles

SQL – Funzioni Data

Advertisements

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.

Pubblicità

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *