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 

为了清楚起见,我将这些函数称为“最小”和“最大”,而不是“第一部分”和“第二部分”