使用PostgreSQL基于date_of_birth属性创建具有年龄约束的表

时间:2014-09-29 21:40:07

标签: sql postgresql

CREATE TABLE customer (
    date_of_birth           date            NOT NULL
    );

尝试将其设置为在将值插入表格时,某人无法输入小于18岁的年龄。我如何使用date_of_birth属性执行此操作?

注意:我确实知道如何使用CHECK(年龄> 18),但我不知道如何将其与date_of_birth属性结合使用。

1 个答案:

答案 0 :(得分:4)

根据current_date的值使用CHECK约束。由于current_date总是随着时间的推移而增加,所以今天通过此约束的任何值也将在明天通过。

CREATE TABLE customer (
  date_of_birth date NOT NULL
    check ( date_of_birth < (current_date - interval '18' year ) )
);

insert into customer values ('1996-09-29');
ERROR:  new row for relation "customer" violates check constraint "customer_date_of_birth_check"
insert into customer values ('1996-09-28');
Query returned successfully: one row affected, 22 ms execution time.