gpt4 book ai didi

postgresql - 如何在 PostgreSQL 中获取年龄

转载 作者:行者123 更新时间:2023-11-29 12:55:42 26 4
gpt4 key购买 nike

我是 SQL 的新手,我想在 PostgreSQL 中创建一个触发器,用于根据格式为“yymmdd”的字符串“personalNumber”检查一个人是否成人。我的问题是我找不到任何方法从字符串创建时间戳,所以我可以在 age() 函数中使用它。

到目前为止,这是我的代码。我知道我的年龄优先输入变量有误,但我就是找不到让它工作的方法。

CREATE FUNCTION is_person_adult() RETURNS trigger AS $person$
BEGIN

IF age(substr(new."personalNumber", 0, 2) + "-" + substr(new."personalNumber", 2, 4) + "-" + substr(new."personalNumber", 4, 6), current_date) > 18 THEN
new.isadult = TRUE;
ELSE
new.isadult := FALSE;
END IF;
END;
$person$ LANGUAGE plpgsql;

CREATE TRIGGER person_stamp BEFORE INSERT OR UPDATE ON person
FOR EACH ROW EXECUTE PROCEDURE is_person_adult();

最佳答案

您可以使用to_timestamp 函数将此字符串转换为时间戳,然后对其应用age。请注意,age 返回一个时间间隔,而不是一个整数,因此您必须对照 18 年的时间间隔来检查它:

IF AGE(TO_TIMESTAMP(new.personalNumber, 'yymmdd')) > INTERVAL '18 years' THEN
new.isadult := TRUE;
ELSE
new.isadult := FALSE;
END IF;

请注意,由于 isadult 是一个 boolean,因此您不需要 if-else 结构,可以直接将其赋值:

new.isadult := 
(AGE(TO_TIMESTAMP(new.personalNumber, 'yymmdd')) > INTERVAL '18 years');

关于postgresql - 如何在 PostgreSQL 中获取年龄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43956401/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com