我试图根据两个日期来计算一个人的年龄。它仅适用于数据库中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;
$$;
答案 0 :(得分:0)
在Postgres上,您可以使用age function
+----------------+----------+------------------------------------------+-----------------------------+------------------------+
| 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 here
答案 1 :(得分:0)
Unix时间可能正是你要找的:使用php将日期格式转换为unix时间,最高的数字是当前时间。转换生日也是如此,这将是一个较低的数字...计算时间使用您拥有的两个数字并将unix时间转换为您要使用的日期格式,可以使用php
答案 2 :(得分:0)
您可以使用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)