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