如何在PostgreSQL中获得年龄

时间:2017-05-13 18:08:49

标签: postgresql triggers timestamp

我是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();

1 个答案:

答案 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;

请注意,由于isadultboolean,因此您不需要if-else结构,并且可以直接指定它:

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