PostgreSQL - Funções e operadores de DATE / TIME

Havíamos discutido sobre os tipos de dados Data / Hora no capítulo Tipos de dados . Agora, vamos ver os operadores e funções de data / hora.

A tabela a seguir lista os comportamentos dos operadores aritméticos básicos -

Operador Exemplo Resultado
+ data '2001-09-28' + inteiro '7' data '2001-10-05'
+ data '2001-09-28' + intervalo '1 hora' timestamp '2001-09-28 01:00:00'
+ data '2001-09-28' + hora '03: 00 ' timestamp '2001-09-28 03:00:00'
+ intervalo '1 dia' + intervalo '1 hora' intervalo '1 dia 01:00:00'
+ carimbo de data / hora '2001-09-28 01:00' + intervalo '23 horas ' timestamp '2001-09-29 00:00:00'
+ hora '01: 00 '+ intervalo' 3 horas ' hora '04: 00: 00 '
- - intervalo '23 horas ' intervalo '-23: 00: 00'
- data '2001-10-01' - data '2001-09-28' inteiro '3' (dias)
- data '2001-10-01' - inteiro '7' data '2001-09-24'
- data '2001-09-28' - intervalo '1 hora' timestamp '2001-09-27 23:00:00'
- hora '05: 00 '- hora '03: 00' intervalo '02: 00: 00 '
- hora '05: 00 '- intervalo' 2 horas ' hora '03: 00: 00 '
- timestamp '2001-09-28 23:00' - intervalo '23 horas ' timestamp '2001-09-28 00:00:00'
- intervalo '1 dia' - intervalo '1 hora' intervalo '1 dia -01: 00: 00'
- timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00' intervalo '1 dia 15:00:00'
* 900 * intervalo '1 segundo' intervalo '00: 15: 00 '
* 21 * intervalo '1 dia' intervalo '21 dias '
* precisão dupla '3,5' * intervalo '1 hora' intervalo '03: 30: 00 '
/ intervalo '1 hora' / precisão dupla '1,5' intervalo '00: 40: 00 '

A seguir está a lista de todas as funções importantes relacionadas à data e hora disponíveis.

S. No. Descrição da função
1 ERA()

Subtrair argumentos

2 DATA / HORA ATUAL ()

Data e hora atuais

3 DATE_PART ()

Obter subcampo (equivalente a extrair)

4 EXTRAIR()

Obter subcampo

5 ISFINITE ()

Teste para data, hora e intervalo finitos (não +/- infinito)

6 JUSTIFICAR

Ajustar intervalo

AGE (timestamp, timestamp), AGE (timestamp)

S. No. Descrição da função
1

AGE(timestamp, timestamp)

Quando chamado com a forma TIMESTAMP do segundo argumento, AGE () subtrai argumentos, produzindo um resultado "simbólico" que usa anos e meses e é do tipo INTERVAL.

2

AGE(timestamp)

Quando invocado apenas com TIMESTAMP como argumento, AGE () subtrai da data_atual (à meia-noite).

Exemplo da função AGE (timestamp, timestamp) é -

testdb=# SELECT AGE(timestamp '2001-04-10', timestamp '1957-06-13');

A instrução PostgreSQL fornecida acima produzirá o seguinte resultado -

age
-------------------------
 43 years 9 mons 27 days

Exemplo da função AGE (timestamp) é -

testdb=# select age(timestamp '1957-06-13');

A instrução PostgreSQL fornecida acima produzirá o seguinte resultado -

age
--------------------------
 55 years 10 mons 22 days

DATA / HORA ATUAL ()

O PostgreSQL fornece várias funções que retornam valores relacionados à data e hora atuais. A seguir estão algumas funções -

S. No. Descrição da função
1

CURRENT_DATE

Fornece a data atual.

2

CURRENT_TIME

Entrega valores com fuso horário.

3

CURRENT_TIMESTAMP

Entrega valores com fuso horário.

4

CURRENT_TIME(precision)

Opcionalmente, aceita um parâmetro de precisão, que faz com que o resultado seja arredondado para aquela quantidade de dígitos fracionários no campo de segundos.

5

CURRENT_TIMESTAMP(precision)

Opcionalmente, aceita um parâmetro de precisão, que faz com que o resultado seja arredondado para aquela quantidade de dígitos fracionários no campo de segundos.

6

LOCALTIME

Entrega valores sem fuso horário.

7

LOCALTIMESTAMP

Entrega valores sem fuso horário.

8

LOCALTIME(precision)

Opcionalmente, aceita um parâmetro de precisão, que faz com que o resultado seja arredondado para aquela quantidade de dígitos fracionários no campo de segundos.

9

LOCALTIMESTAMP(precision)

Opcionalmente, aceita um parâmetro de precisão, que faz com que o resultado seja arredondado para aquela quantidade de dígitos fracionários no campo de segundos.

Exemplos usando as funções da tabela acima -

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)

O PostgreSQL também fornece funções que retornam a hora de início da instrução atual, bem como a hora atual atual no instante em que a função é chamada. Essas funções são -

S. No. Descrição da função
1

transaction_timestamp()

É equivalente a CURRENT_TIMESTAMP, mas é nomeado para refletir claramente o que retorna.

2

statement_timestamp()

Ele retorna a hora de início da instrução atual.

3

clock_timestamp()

Ele retorna a hora atual real e, portanto, seu valor muda mesmo dentro de um único comando SQL.

4

timeofday()

Ele retorna a hora atual real, mas como uma string de texto formatada em vez de um carimbo de data / hora com valor de fuso horário.

5

now()

É um PostgreSQL tradicional equivalente a transaction_timestamp ().

DATE_PART (texto, timestamp), DATE_PART (texto, intervalo), DATE_TRUNC (texto, timestamp)

S. No. Descrição da função
1

DATE_PART('field', source)

Essas funções obtêm os subcampos. O parâmetro de campo precisa ser um valor de string, não um nome.

Os nomes de campo válidos são: século, dia, década, dow, doy, epoch, hour, isodow, isoyear, microssegundos, milênio, milissegundos, minuto, mês, trimestre, segundo, fuso horário, fuso horário_hora, fuso horário_minuto, semana, ano.

2

DATE_TRUNC('field', source)

Esta função é conceitualmente semelhante à função trunc para números. source é uma expressão de valor do tipo timestamp ou intervalo. campo seleciona com qual precisão truncar o valor de entrada. O valor de retorno é do tipo timestamp ou intervalo .

Os valores válidos para o campo são: microssegundos, milissegundos, segundo, minuto, hora, dia, semana, mês, trimestre, ano, década, século, milênio

A seguir estão exemplos para funções DATE_PART ( 'campo' , fonte) -

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)

A seguir estão exemplos para funções DATE_TRUNC ( 'campo' , fonte) -

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 do carimbo de data / hora), EXTRACT (campo do intervalo)

o EXTRACT(field FROM source)função recupera subcampos como ano ou hora de valores de data / hora. A origem deve ser uma expressão de valor do tipo carimbo de data / hora, hora ou intervalo . O campo é um identificador ou string que seleciona qual campo extrair do valor de origem. A função EXTRACT retorna valores do tipo double precision .

A seguir estão nomes de campo válidos (semelhantes aos nomes de campo de função DATE_PART): século, dia, década, dow, doy, epoch, hour, isodow, isoyear, microssegundos, milênio, milissegundos, minuto, mês, trimestre, segundo, fuso horário, fuso horário_hour , fuso horário_minuto, semana, ano.

A seguir estão exemplos de funções EXTRACT ( 'campo' , fonte) -

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 (carimbo de data / hora), ISFINITE (intervalo)

S. No. Descrição da função
1

ISFINITE(date)

Testes de data finita.

2

ISFINITE(timestamp)

Testes para registro de tempo finito.

3

ISFINITE(interval)

Testes de intervalo finito.

A seguir estão os exemplos das funções 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 (intervalo), JUSTIFY_HOURS (intervalo), JUSTIFY_INTERVAL (intervalo)

S. No. Descrição da função
1

JUSTIFY_DAYS(interval)

Ajusta o intervalo para que os períodos de 30 dias sejam representados como meses. Devolver ointerval tipo

2

JUSTIFY_HOURS(interval)

Ajusta o intervalo para que os períodos de 24 horas sejam representados como dias. Devolver ointerval tipo

3

JUSTIFY_INTERVAL(interval)

Ajusta o intervalo usando JUSTIFY_DAYS e JUSTIFY_HOURS, com ajustes de sinal adicionais. Devolver ointerval tipo

A seguir estão os exemplos para as funções 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)