Postgresql 从daterange列类型中选择一个部件
也许有一个函数Postgresql 从daterange列类型中选择一个部件,postgresql,date-range,Postgresql,Date Range,也许有一个函数 选择min(“[2010-01-01,2010-02-01]”::daterange);应返回:“2010-01-01” 选择max(“[2010-01-01,2010-02-01]”::daterange);应该返回:“2010-01-31”否,但是您可以使用upper_inc,upper,lower_inc,函数来编写这样的函数: WITH dr AS ( SELECT '[2010-01-01, 2010-02-01)'::daterange r ), t AS (
选择min(“[2010-01-01,2010-02-01]”::daterange);
应返回:“2010-01-01”
选择max(“[2010-01-01,2010-02-01]”::daterange);
应该返回:“2010-01-31”否,但是您可以使用upper_inc
,upper
,lower_inc
,函数来编写这样的函数:
WITH dr AS (
SELECT '[2010-01-01, 2010-02-01)'::daterange r
), t AS (
SELECT r, lower_inc(r) li, upper_inc(r) ui, lower(r) l, upper(r) u FROM dr
)
SELECT CASE WHEN li THEN l ELSE l + INTERVAL '1 DAY' END AS "range_minimum"
, CASE WHEN ui THEN u ELSE u - INTERVAL '1 DAY' END AS "range_maximum"
FROM t;
关于起点:
SELECT lower('[2010-01-01, 2010-02-01)'::daterange);
01/01/2010
因为它是包容性的
对于上层:
SELECT CASE WHEN
upper_inc('[2010-01-01, 2010-02-01)'::daterange) = 'f'
THEN
upper('[2010-01-01, 2010-02-01)'::daterange) - interval '1 day'
ELSE
upper('[2010-01-01, 2010-02-01)'::daterange) END AS dt;
01/31/2010 00:00:00
为了清楚起见,我将这些函数称为“最小”和“最大”,而不是“第一部分”和“第二部分”