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)