Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
postgresql中的年龄限制_Sql_Postgresql - Fatal编程技术网

postgresql中的年龄限制

postgresql中的年龄限制,sql,postgresql,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

我想在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
);
ALTER TABLE person ADD CONSTRAINT CHK_biggerThan100检查(
(
(摘录(从当前日期算起的年份)-摘录(从出生算起的年份))*365+
(摘录(从当前_日期算起的月份)-摘录(从出生算起的月份))*30+
(摘录(从当前_日期算起的天)-摘录(从出生算起的天))
)<36500--100年
);
是否有可能以更优雅的方式实现此限制?我如何将生日与2016年1月1日进行比较

My table person只有两个属性:person\u id(int)作为主键和birth(date)。

使用函数date\u part()和age()

有关详细信息,请参阅以获取日期函数的文档

ALTER TABLE person ADD CONSTRAINT CHK_biggerThan100

检查(日期部分(“年”,年龄(时间戳“2016-01-01”,出生))我认为这更简单:

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

101岁是因为声明是“超过100岁”,而不是“100岁或100岁以上”。

谢谢。但我如何将其与2016年1月1日进行比较,以了解该日期之前的年龄是否大于100岁?[问题编辑]你能不能用年龄函数来比较两个日期——出生日期和2016年1月1日,然后用date_part来检查这是否真的是应用程序级逻辑,这也是一件相当主观的事情。人们通常活到>100岁,这会让这样固执己见的计算机系统感到惊愕。严格来说,这不是真的。100岁一天就超过100岁耳朵,但不到101年。无论如何,使用间隔的想法是好的!@Bartoszbiliki…这是一种解释。然而,如果年龄仅以整数来衡量,那么整个一年的100就是100,直到这个人变成101岁。
ALTER TABLE person ADD CONSTRAINT CHK_biggerThan100
    CHECK (birthdate > '2016-01-01' - interval '101 year')