postgresql的年龄限制

时间:2016-10-18 19:08:32

标签: sql postgresql

我想在PostgreSQL中实现以下限制:

  

人们不能在2016年1月1日有超过100年的出生日期。

所以,我实施了限制:

ALTER TABLE person ADD CONSTRAINT CHK_biggerThan100 CHECK(
  (
    (extract(year FROM current_date)  - extract(year FROM birth)) * 365 + 
    (extract(month FROM current_date) - extract(month FROM birth))* 30 +
    (extract(day FROM current_date)   - extract(day FROM birth))
  ) < 36500 --100 years
);

是否有可能以更优雅的方式实施此限制?我怎样才能将生日与1月1日的日期进行比较?

我的桌子人只有两个属性: person_id (int)作为主键,出生(日期)。

2 个答案:

答案 0 :(得分:4)

使用函数date_part()和age()

有关详细信息,请参阅日期函数https://www.postgresql.org/docs/current/static/functions-datetime.html

的文档
ALTER TABLE person ADD CONSTRAINT CHK_biggerThan100 
CHECK (date_part('year',age(timestamp '2016-01-01',birth))<100)

答案 1 :(得分:4)

我认为这更简单:

ALTER TABLE person ADD CONSTRAINT CHK_biggerThan100
    CHECK (birthdate > '2016-01-01' - interval '101 year')

101年是因为声明“超过100”而不是“100或更多”。