【问题标题】:Select a part from the daterange column type从日期范围列类型中选择一个部分
【发布时间】:2021-01-11 17:22:30
【问题描述】:

也许有一个功能?

SELECT min('[2010-01-01, 2010-02-01)'::daterange); 应该返回:'2010-01-01'

SELECT max('[2010-01-01, 2010-02-01)'::daterange); 应该返回:'2010-01-31'

【问题讨论】:

  • 为了清楚起见,我将这些函数称为“最小”和“最大”而不是“part_one”和“part_two”

标签: postgresql date-range


【解决方案1】:

不,但您可以使用upper_incupperlower_inclower 函数来编写这样的函数:

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;

【讨论】:

    【解决方案2】:

    对于起点:

    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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 2018-01-31
      • 1970-01-01
      相关资源
      最近更新 更多