PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как age() работи в PostgreSQL

В Postgres, age() функцията връща възрастта въз основа на две променливи за време или дата.

Резултатът се връща с години и месеци, а не само с дни.

Например резултатът може да изглежда така:3 години 2 месеца 30 дни .

Синтаксис

Можете да използвате един от следните два синтаксиса:

age(timestamp)
age(timestamp, timestamp) 

Първият връща възрастта въз основа на текущата дата. По-конкретно, той изважда от current_date() (в полунощ).

Вторият синтаксис ви позволява да получите датата въз основа на две изрични дати. Използването на този синтаксис води до изваждане на втората дата от първата. С други думи, възрастта не се основава на днешната дата – тя се основава на датата, посочена в първия аргумент.

Пример 1 – Използвайте днешната дата

Ето пример за демонстриране на първия синтаксис.

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

Резултат:

33 години 2 месеца 30 дни

В този случай дадох един единствен аргумент. age() след това функцията извади това от днешната дата (датата, на която изпълних заявката) и получаваме резултата.

Само за да демонстрирам това допълнително, ето го отново, но този път заедно с current_date() за да покажа датата, на която изпълних заявката.

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

Резултат:

<предварителна> текуща_дата | възраст --------------+------------------------------ 2020-06-13 | 33 години 2 месеца 30 дни

Пример 2 – Използвайте персонализирана дата

В този пример предоставям две дати, с които да се сравняват. Следователно възрастта не се основава на днешната дата. Базира се на първата дата, предоставена на age() функция.

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

Резултат:

9 месеца 18 дни

В този случай възрастта е по-малка от година и така годината не се споменава в резултатите.

Ето още един пример, който показва какво се случва, ако се промени само годината (т.е. частите от месеца и деня на двете дати са абсолютно еднакви, но годината е различна).

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

Резултат:

7 години

Така че отново, той просто пропуска частите, които не са от значение (в този случай месеците и дните).

Пример 3 – идентични дати

Ето какво се случва, ако и двете дати са еднакви.

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

Резултат:

00:00:00

Пример 4 – Отрицателна възраст

Ако втората среща е по-късна от първата, в крайна сметка ще получите отрицателна възраст.

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

Резултат:

-1 година -2 мес. -6 дни

Тук знакът минус се добавя към всички компоненти на датата (т.е. компонентите на годината, месеца и дните).

Пример 5 – Възраст в години

Ако искате само възрастта в години, можете да използвате или extract() или date_part() за да извлечете годината от age() връщаната стойност на функцията.

Ето пример, който използва extract() функция:

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

Резултат:

22.0

Ето как изглежда, когато го стартирам в Azure Data Studio.

Когато го стартирам в psql , разбрах това:

22

И двете extract() и date_part() връщат резултатите си, като използват типа данни с двойна точност.

Можете да преобразувате това в цяло число (или друг тип данни), ако е необходимо, като го добавите с ::int .

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

Резултат:

22

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PSQLException:ResultSet не е позициониран правилно, може би трябва да се обадите следващия

  2. Как да принудя Postgres да използва конкретен индекс?

  3. Какъв е максималният брой допустими параметри за тип доставчик на база данни?

  4. как да проверите вида на стойността в postgres

  5. Естествен сорт, поддържащ големи числа