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 daysEsempio 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 daysDATA / 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)