我是SQL的新手,我想在PostgreSQL中创建一个触发器,用于检查一个人是否是字符串“personalNumber”的成人,格式为'yymmdd'。 我的问题是我找不到任何方法从字符串创建时间戳,所以我可以在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();
答案 0 :(得分:2)
您可以使用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');