我在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;
哪个有效,但我似乎无法让它在函数内部工作。你能给我一个想法吗?
谢谢!
答案 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);