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