В 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