SQL中的getAge取决于两个日期

时间:2017-04-15 21:46:23

标签: sql postgresql date sql-date-functions

我试图根据两个日期来计算一个人的年龄。它仅适用于数据库中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 个答案:

答案 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)