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