SQL 中的 getAge 取决于两个日期

getAge in SQL depending on two dates

我想根据两个日期计算一个人的年龄。它只适用于数据库中注册的 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;
    $$;

在 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

Unix 时间可能就是您要查找的内容:使用 php 将您的日期格式转换为 Unix 时间,最高数字也是当前的 time.convert 生日,这将是一个较小的数字...用您拥有的两个数字计算时间并将 unix 时间转换为您想要使用的日期格式,这可以通过 php

完成

有一个双参数形式的 age() 你可以使用它

age(timestamp, timestamp)   interval

Subtract arguments, producing a "symbolic" result that uses years and months, rather than just days age(timestamp '2001-04-10', timestamp '1957-06-13') 43 years 9 mons 27 days

使用起来非常简单。

SELECT age('1978-01-24'::date, '1972-02-24'::date);

       age       
-----------------
 5 years 11 mons
(1 row)