Federico Ponzi Asked: 2014-09-28 00:26:13 +0800 CST2014-09-28 00:26:13 +0800 CST 2014-09-28 00:26:13 +0800 CST 我可以创建一个年份范围内的域吗 772 我必须创建一个间隔两年的自定义域,但实际上我需要这两年。例如: '2013/2014' '2015/2016' 有没有办法将这两年都打包在一个域中,或者我必须将它们分开在关系的两个属性中? postgresql domain 1 个回答 Voted Best Answer Evan Carroll 2018-06-03T15:20:33+08:002018-06-03T15:20:33+08:00 域是一种约束。它没有任何价值。它只能限制一个类型来排除值。如果需要存储范围,请使用范围类型。 作为旁注,您实际上可以在范围类型上创建域。如果您希望所有范围都在星期三开始 CREATE DOMAIN foo AS daterange CHECK ( EXTRACT(dow FROM lower(VALUE)) = 4 ); SELECT daterange('2018-01-02'::date,'2018-02-05'::date); SELECT daterange('2018-01-02'::date,'2018-02-05'::date)::foo; ERROR: value for domain foo violates check constraint "foo_check" 此外,您还可以确保范围始终为一年: CREATE DOMAIN bar AS daterange CHECK ( (lower(VALUE)::timestamp without time zone - upper(VALUE)::timestamp without time zone) = '-365 days' ); 但是,如果您打算这样做——使您的范围始终为一年和固定大小,我建议您只存储开始的年份::smallint并完成它。
域是一种约束。它没有任何价值。它只能限制一个类型来排除值。如果需要存储范围,请使用范围类型。
作为旁注,您实际上可以在范围类型上创建域。如果您希望所有范围都在星期三开始
此外,您还可以确保范围始终为一年:
但是,如果您打算这样做——使您的范围始终为一年和固定大小,我建议您只存储开始的年份
::smallint
并完成它。