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)