Postgresql - 计算年龄的函数

时间:2018-04-12 01:10:53

标签: postgresql

我在Postgresql中构建一个用于计算行年龄的函数时遇到了一些麻烦。

这是我的表:

CREATE TABLE students (
    id serial PRIMARY KEY, 
    name varchar(30) NOT NULL, 
    aproven boolean DEFAULT false, 
    enrolled integer DEFAULT 0, 
    birth_date DATE
);

我试图从一个应该计算学生年龄的函数得到一个简单的输出。像

这样的东西
SELECT student_age(3); 

应计算第3名学生的年龄并返回其唯一的id及其年龄。

目前我正在尝试这个:

SELECT id, age(students.birth_date::timestamp) AS years_old FROM students;

哪个有效,但我似乎无法让它在函数内部工作。你能给我一个想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以创建一个在SQL中返回特定类型的函数:

CREATE TYPE student_age AS (
    id INTEGER,
    age INTERVAL
);

CREATE OR REPLACE FUNCTION student_age(INTEGER) RETURNS student_age AS $$
    SELECT id, AGE(birth_date) AS age FROM students WHERE id = $1; 
$$ LANGUAGE SQL;

您现在可以像桌子一样使用该功能:

SELECT * FROM student_age(3);