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

gat*_*fnm 0 sql postgresql

CREATE TABLE customer (
    date_of_birth           date            NOT NULL
    );
Run Code Online (Sandbox Code Playgroud)

试图使某人在将值插入表中时不能输入小于 18 岁的年龄。我将如何使用 date_of_birth 属性执行此操作?

注意:我知道如何使用 CHECK(age > 18),但我不知道如何将它与 date_of_birth 属性合并。

Mik*_*ll' 5

使用基于 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');
Run Code Online (Sandbox Code Playgroud)
错误:关系“客户”的新行违反检​​查约束“customer_date_of_birth_check”
insert into customer values ('1996-09-28');
Run Code Online (Sandbox Code Playgroud)
查询成功返回:一行受影响,22 毫秒执行时间。

  • 或者:`检查(年龄(date_of_birth)&gt;=区间'18'年)` (2认同)