PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como age() funciona no PostgreSQL


No Postgres, o age() A função retorna a idade com base em duas variáveis ​​de data e hora.

O resultado é retornado usando anos e meses, em vez de apenas dias.

Por exemplo, um resultado pode ser assim:3 anos 2 meses 30 dias .

Sintaxe


Você pode usar uma das duas sintaxes a seguir:
age(timestamp)
age(timestamp, timestamp)

O primeiro retorna a idade com base na data atual. Especificamente, ele subtrai de current_date() (à meia-noite).

A segunda sintaxe permite obter a data com base em duas datas explícitas. O uso dessa sintaxe faz com que a segunda data seja subtraída da primeira. Em outras palavras, a idade não é baseada na data de hoje – é baseada na data fornecida no primeiro argumento.

Exemplo 1 – Use a data de hoje


Aqui está um exemplo para demonstrar a primeira sintaxe.
SELECT 	age(timestamp '1987-03-14');

Resultado:
33 years 2 mons 30 days

Neste caso, forneci um único argumento. A age() A função então subtraiu isso da data de hoje (a data em que executei a consulta) e obtemos o resultado.

Apenas para demonstrar isso ainda mais, aqui está novamente, mas desta vez ao lado de current_date() para mostrar a data em que executei a consulta.
SELECT 	
  current_date,
  age(timestamp '1987-03-14');

Resultado:
 current_date |           age           
--------------+-------------------------
 2020-06-13   | 33 years 2 mons 30 days

Exemplo 2 – Use uma data personalizada


Neste exemplo, forneço duas datas com as quais comparar. Portanto, a idade não é baseada na data de hoje. É baseado na primeira data fornecida ao age() função.
SELECT age(timestamp '2001-01-01', timestamp '2000-03-14');

Resultado:
9 mons 18 days

Nesse caso, a idade é inferior a um ano e, portanto, o ano não é mencionado nos resultados.

Aqui está outro exemplo que mostra o que acontece se apenas o ano mudar (ou seja, as partes do mês e do dia das duas datas são exatamente as mesmas, mas o ano é diferente).
SELECT age(timestamp '2007-01-01', timestamp '2000-01-01');

Resultado:
7 years

Então, novamente, ele simplesmente omite as partes que não são relevantes (neste caso, os meses e dias).

Exemplo 3 – Datas idênticas


Veja o que acontece se as duas datas forem iguais.
SELECT age(timestamp '2001-01-01', timestamp '2001-01-01');

Resultado:
00:00:00

Exemplo 4 - Idade Negativa


Se a segunda data for posterior à primeira, você terá uma idade negativa.
SELECT age(timestamp '2001-01-01', timestamp '2002-03-07');

Resultado:
-1 years -2 mons -6 days

Aqui, o sinal de menos é anexado a todos os componentes da data (ou seja, os componentes de ano, mês e dias).

Exemplo 5 – Idade em anos


Se você quiser apenas a idade em anos, você pode usar extract() ou date_part() para extrair o ano do age() valor de retorno da função.

Aqui está um exemplo que usa o extract() função:
SELECT extract(year from age(timestamp '1997-10-25'));

Resultado:
22.0

É assim que aparece quando o executo no Azure Data Studio.

Quando eu executo no psql , Eu entendi isso:
22

Ambos extract() e date_part() retornam seus resultados usando o tipo de dados de precisão dupla.

Você pode converter isso em um inteiro (ou outro tipo de dados), se necessário, anexando-o com ::int .
SELECT extract(year from age(timestamp '1997-10-25'))::int;

Resultado:
22