getAge в SQL в зависимости от двух дат
Я пытаюсь рассчитать возраст человека в зависимости от двух дат. Это работает только для 50% людей, зарегистрированных в базе данных, а для остальных это просто возраст первого человека.
Есть идеи, где проблема может быть?
CREATE OR REPLACE FUNCTION getAge ()
RETURNS INT
LANGUAGE SQL
AS
$$
SELECT CAST (
(EXTRACT (YEAR FROM CURRENT_DATE))
- (EXTRACT (YEAR FROM birth_date)) AS INTEGER)
FROM person;
$$;
3 ответа
Существует форма с двумя аргументами age()
Вы можете использовать для этого
age(timestamp, timestamp) interval
Вычтите аргументы, получая "символический" результат, который использует годы и месяцы, а не просто дни (отметка времени '2001-04-10', отметка времени '1957-06-13') 43 года 9 месяцев 27 дней
Использовать его довольно просто.
SELECT age('1978-01-24'::date, '1972-02-24'::date);
age
-----------------
5 years 11 mons
(1 row)
На Postgres вы можете использовать функцию возраста
+----------------+----------+------------------------------------------+-----------------------------+------------------------+
| age(timestamp) | interval | Subtract from current_date (at midnight) | age(timestamp '1957-06-13') | 43 years 8 mons 3 days |
+----------------+----------+------------------------------------------+-----------------------------+------------------------+
select extract(year from age(timestamp '1957-06-13'))
| date_part | |: -------- | | 59 |
dbfiddle здесь
Время Unix может быть тем, что вы ищете: используйте php, чтобы преобразовать формат даты в unix, самое большое число - текущее время. Преобразуйте также дату рождения, это будет меньшее число... вычислите время с двумя числа, которые у вас есть, и конвертируйте время Unix в формат даты, который вы хотели бы использовать, это можно сделать с помощью php