PostgreSQL - Funzioni e operatori DATA / ORA
Abbiamo discusso dei tipi di dati Data / Ora nel capitolo Tipi di dati . Vediamo ora gli operatori e le funzioni di data / ora.
La tabella seguente elenca i comportamenti degli operatori aritmetici di base:
Operatore | Esempio | Risultato |
---|---|---|
+ | data "2001-09-28" + numero intero "7" | data "2001-10-05" |
+ | data "2001-09-28" + intervallo "1 ora" | timestamp "2001-09-28 01:00:00" |
+ | data '2001-09-28' + ora '03: 00 ' | timestamp "2001-09-28 03:00:00" |
+ | intervallo "1 giorno" + intervallo "1 ora" | intervallo "1 giorno 01:00:00" |
+ | timestamp "2001-09-28 01:00" + intervallo "23 ore" | timestamp "2001-09-29 00:00:00" |
+ | ora '01: 00 '+ intervallo' 3 ore ' | tempo '04: 00: 00 ' |
- | - intervallo "23 ore" | intervallo '-23: 00: 00' |
- | data "2001-10-01" - data "2001-09-28" | intero "3" (giorni) |
- | data "2001-10-01" - numero intero "7" | data "2001-09-24" |
- | data "2001-09-28" - intervallo "1 ora" | timestamp "2001-09-27 23:00:00" |
- | ora '05: 00 '- ora '03: 00' | intervallo '02: 00: 00 ' |
- | ora '05: 00 '- intervallo' 2 ore ' | tempo '03: 00: 00 ' |
- | timestamp "2001-09-28 23:00" - intervallo "23 ore" | timestamp "2001-09-28 00:00:00" |
- | intervallo "1 giorno" - intervallo "1 ora" | intervallo '1 giorno -01: 00: 00' |
- | timestamp "29/09/2001 03:00" - timestamp "27/09/2001 12:00" | intervallo "1 giorno 15:00:00" |
* | 900 * intervallo "1 secondo" | intervallo '00: 15: 00 ' |
* | 21 * intervallo "1 giorno" | intervallo "21 giorni" |
* | doppia precisione "3,5" * intervallo "1 ora" | intervallo '03: 30: 00 ' |
/ | intervallo "1 ora" / doppia precisione "1,5" | intervallo '00: 40: 00 ' |
Di seguito è riportato l'elenco di tutte le funzioni importanti relative a data e ora disponibili.
S. No. | Descrizione della funzione |
---|---|
1 | ETÀ() Sottrai argomenti |
2 | DATA / ORA CORRENTI () Data e ora correnti |
3 | DATE_PART () Ottieni sottocampo (equivalente a estrarre) |
4 | ESTRATTO() Ottieni sottocampo |
5 | ISFINITE () Test per data, ora e intervallo finiti (non +/- infinito) |
6 | GIUSTIFICARE Regola l'intervallo |
AGE (timestamp, timestamp), AGE (timestamp)
S. No. | Descrizione della funzione |
---|---|
1 | AGE(timestamp, timestamp) Quando invocato con la forma TIMESTAMP del secondo argomento, AGE () sottrae argomenti, producendo un risultato "simbolico" che utilizza anni e mesi ed è di tipo INTERVAL. |
2 | AGE(timestamp) Quando invocato con solo il TIMESTAMP come argomento, AGE () sottrae da current_date (a mezzanotte). |
Esempio della funzione AGE (timestamp, timestamp) è -
testdb=# SELECT AGE(timestamp '2001-04-10', timestamp '1957-06-13');
L'istruzione PostgreSQL sopra indicata produrrà il seguente risultato:
age
-------------------------
43 years 9 mons 27 days
Esempio della funzione AGE (timestamp) è -
testdb=# select age(timestamp '1957-06-13');
L'istruzione PostgreSQL sopra indicata produrrà il seguente risultato:
age
--------------------------
55 years 10 mons 22 days
DATA / ORA CORRENTI ()
PostgreSQL fornisce una serie di funzioni che restituiscono valori relativi alla data e all'ora correnti. Di seguito sono riportate alcune funzioni:
S. No. | Descrizione della funzione |
---|---|
1 | CURRENT_DATE Fornisce la data corrente. |
2 | CURRENT_TIME Fornisce valori con fuso orario. |
3 | CURRENT_TIMESTAMP Fornisce valori con fuso orario. |
4 | CURRENT_TIME(precision) Facoltativamente, accetta un parametro di precisione, che fa sì che il risultato venga arrotondato a quel numero di cifre frazionarie nel campo dei secondi. |
5 | CURRENT_TIMESTAMP(precision) Facoltativamente, accetta un parametro di precisione, che fa sì che il risultato venga arrotondato a quel numero di cifre frazionarie nel campo dei secondi. |
6 | LOCALTIME Fornisce valori senza fuso orario. |
7 | LOCALTIMESTAMP Fornisce valori senza fuso orario. |
8 | LOCALTIME(precision) Facoltativamente, accetta un parametro di precisione, che fa sì che il risultato venga arrotondato a quel numero di cifre frazionarie nel campo dei secondi. |
9 | LOCALTIMESTAMP(precision) Facoltativamente, accetta un parametro di precisione, che fa sì che il risultato venga arrotondato a quel numero di cifre frazionarie nel campo dei secondi. |
Esempi di utilizzo delle funzioni dalla tabella sopra:
testdb=# SELECT CURRENT_TIME;
timetz
--------------------
08:01:34.656+05:30
(1 row)
testdb=# SELECT CURRENT_DATE;
date
------------
2013-05-05
(1 row)
testdb=# SELECT CURRENT_TIMESTAMP;
now
-------------------------------
2013-05-05 08:01:45.375+05:30
(1 row)
testdb=# SELECT CURRENT_TIMESTAMP(2);
timestamptz
------------------------------
2013-05-05 08:01:50.89+05:30
(1 row)
testdb=# SELECT LOCALTIMESTAMP;
timestamp
------------------------
2013-05-05 08:01:55.75
(1 row)
PostgreSQL fornisce anche funzioni che restituiscono l'ora di inizio dell'istruzione corrente, nonché l'ora corrente effettiva nel momento in cui viene chiamata la funzione. Queste funzioni sono:
S. No. | Descrizione della funzione |
---|---|
1 | transaction_timestamp() È equivalente a CURRENT_TIMESTAMP, ma è denominato per riflettere chiaramente ciò che restituisce. |
2 | statement_timestamp() Restituisce l'ora di inizio dell'istruzione corrente. |
3 | clock_timestamp() Restituisce l'ora corrente effettiva e quindi il suo valore cambia anche all'interno di un singolo comando SQL. |
4 | timeofday() Restituisce l'ora corrente effettiva, ma come stringa di testo formattata anziché come timestamp con il valore del fuso orario. |
5 | now() È un PostgreSQL tradizionale equivalente a transaction_timestamp (). |
DATE_PART (testo, timestamp), DATE_PART (testo, intervallo), DATE_TRUNC (testo, timestamp)
S. No. | Descrizione della funzione |
---|---|
1 | DATE_PART('field', source) Queste funzioni ottengono i sottocampi. Il parametro field deve essere un valore stringa, non un nome. I nomi dei campi validi sono: century, day, decade, dow, doy, epoch, hour, isodow, isoyear, microseconds, millennium, milliseconds, minute, month, quarter, second, timezone, timezone_hour, timezone_minute, week, year. |
2 | DATE_TRUNC('field', source) Questa funzione è concettualmente simile alla funzione trunc per i numeri. source è un'espressione di valore di tipo timestamp o intervallo. campo seleziona con quale precisione troncare il valore di input. Il valore restituito è di tipo timestamp o intervallo . I valori validi per il campo sono: microsecondi, millisecondi, secondo, minuto, ora, giorno, settimana, mese, trimestre, anno, decennio, secolo, millennio |
Di seguito sono riportati esempi di funzioni DATE_PART ( 'campo' , sorgente):
testdb=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
16
(1 row)
testdb=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes');
date_part
-----------
4
(1 row)
Di seguito sono riportati esempi di funzioni DATE_TRUNC ( 'campo' , sorgente):
testdb=# SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');
date_trunc
---------------------
2001-02-16 20:00:00
(1 row)
testdb=# SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40');
date_trunc
---------------------
2001-01-01 00:00:00
(1 row)
EXTRACT (campo da timestamp), EXTRACT (campo da intervallo)
Il EXTRACT(field FROM source)la funzione recupera i sottocampi come l'anno o l'ora dai valori di data / ora. L' origine deve essere un'espressione di valore di tipo timestamp, ora o intervallo . Il campo è un identificatore o una stringa che seleziona quale campo estrarre dal valore di origine. La funzione ESTRATTA restituisce valori di tipo doppia precisione .
I seguenti sono nomi di campo validi (simili ai nomi dei campi della funzione DATE_PART): century, day, decade, dow, doy, epoch, hour, isodow, isoyear, microseconds, millennium, milliseconds, minute, month, quarter, second, timezone, timezone_hour , timezone_minute, settimana, anno.
I seguenti sono esempi di funzioni EXTRACT ( 'field' , source) -
testdb=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
date_part
-----------
20
(1 row)
testdb=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
16
(1 row)
ISFINITE (data), ISFINITE (timestamp), ISFINITE (intervallo)
S. No. | Descrizione della funzione |
---|---|
1 | ISFINITE(date) Test per data finita. |
2 | ISFINITE(timestamp) Test per timestamp finito. |
3 | ISFINITE(interval) Test per intervallo finito. |
Di seguito sono riportati gli esempi delle funzioni ISFINITE ():
testdb=# SELECT isfinite(date '2001-02-16');
isfinite
----------
t
(1 row)
testdb=# SELECT isfinite(timestamp '2001-02-16 21:28:30');
isfinite
----------
t
(1 row)
testdb=# SELECT isfinite(interval '4 hours');
isfinite
----------
t
(1 row)
JUSTIFY_DAYS (intervallo), JUSTIFY_HOURS (intervallo), JUSTIFY_INTERVAL (intervallo)
S. No. | Descrizione della funzione |
---|---|
1 | JUSTIFY_DAYS(interval) Regola l'intervallo in modo che i periodi di tempo di 30 giorni siano rappresentati come mesi. Restituisci il fileinterval genere |
2 | JUSTIFY_HOURS(interval) Regola l'intervallo in modo che i periodi di 24 ore siano rappresentati come giorni. Restituisci il fileinterval genere |
3 | JUSTIFY_INTERVAL(interval) Regola l'intervallo utilizzando JUSTIFY_DAYS e JUSTIFY_HOURS, con ulteriori aggiustamenti del segno. Restituisci il fileinterval genere |
Di seguito sono riportati gli esempi per le funzioni ISFINITE ():
testdb=# SELECT justify_days(interval '35 days');
justify_days
--------------
1 mon 5 days
(1 row)
testdb=# SELECT justify_hours(interval '27 hours');
justify_hours
----------------
1 day 03:00:00
(1 row)
testdb=# SELECT justify_interval(interval '1 mon -1 hour');
justify_interval
------------------
29 days 23:00:00
(1 row)