sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo funciona age() en PostgreSQL

En Postgres, la age() La función devuelve la edad en función de dos variables de marca de tiempo o fecha.

El resultado se devuelve utilizando años y meses, en lugar de solo días.

Por ejemplo, un resultado podría verse así:3 años 2 meses 30 días .

Sintaxis

Puede utilizar una de las dos sintaxis siguientes:

age(timestamp)
age(timestamp, timestamp)

El primero devuelve la edad en función de la fecha actual. Específicamente, resta de current_date() (a medianoche).

La segunda sintaxis le permite obtener la fecha en función de dos fechas explícitas. El uso de esta sintaxis hace que la segunda fecha se reste de la primera. En otras palabras, la edad no se basa en la fecha de hoy, sino en la fecha proporcionada en el primer argumento.

Ejemplo 1:usar la fecha de hoy

Aquí hay un ejemplo para demostrar la primera sintaxis.

SELECT 	age(timestamp '1987-03-14');

Resultado:

33 years 2 mons 30 days

En este caso, proporcioné un solo argumento. La age() luego restó eso de la fecha de hoy (la fecha en que ejecuté la consulta) y obtuvimos el resultado.

Solo para demostrar esto aún más, aquí está de nuevo, pero esta vez junto con current_date() para mostrar la fecha en que ejecuté la consulta.

SELECT 	
  current_date,
  age(timestamp '1987-03-14');

Resultado:

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

Ejemplo 2:use una fecha personalizada

En este ejemplo, proporciono dos fechas con las que comparar. Por lo tanto, la edad no se basa en la fecha de hoy. Se basa en la primera fecha proporcionada a age() función.

SELECT age(timestamp '2001-01-01', timestamp '2000-03-14');

Resultado:

9 mons 18 days

En este caso, la edad es inferior a un año, por lo que el año no se menciona en los resultados.

Aquí hay otro ejemplo que muestra lo que sucede si solo cambia el año (es decir, las porciones de mes y día de las dos fechas son exactamente iguales, pero el año es diferente).

SELECT age(timestamp '2007-01-01', timestamp '2000-01-01');

Resultado:

7 years

De nuevo, simplemente omite las partes que no son relevantes (en este caso, los meses y los días).

Ejemplo 3:fechas idénticas

Esto es lo que sucede si ambas fechas son iguales.

SELECT age(timestamp '2001-01-01', timestamp '2001-01-01');

Resultado:

00:00:00

Ejemplo 4:Edad negativa

Si la segunda fecha es posterior a la primera fecha, termina con una edad negativa.

SELECT age(timestamp '2001-01-01', timestamp '2002-03-07');

Resultado:

-1 years -2 mons -6 days

Aquí, el signo menos se antepone a todos los componentes de la fecha (es decir, los componentes de año, mes y día).

Ejemplo 5:Edad en años

Si solo desea la edad en años, puede usar extract() o date_part() para extraer el año de la age() valor de retorno de la función.

Aquí hay un ejemplo que usa extract() función:

SELECT extract(year from age(timestamp '1997-10-25'));

Resultado:

22.0

Así es como aparece cuando lo ejecuto en Azure Data Studio.

Cuando lo ejecuto en psql , me sale esto:

22

Ambos extract() y date_part() devolver sus resultados usando el tipo de datos de doble precisión.

Puede convertir esto a un número entero (u otro tipo de datos) si es necesario, agregándolo con ::int .

SELECT extract(year from age(timestamp '1997-10-25'))::int;

Resultado:

22