我想在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)作为主键,出生(日期)。
答案 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或更多”。