Postgresql 总月数的研究后间隔

Postgresql 总月数的研究后间隔,postgresql,Postgresql,我有一个包含区间数据的Postgres表,例如: 0个月 1个月 1.5个月 9个月 一年 我想创建一个显示值的视图,但以总月份为单位(因此在我的示例中正确的值是:0、1、1.5、9、12)。我试过使用: EXTRACT(MONTHS FROM "MyTable"."Interval"::INTERVAL) 但是,这产生了不正确的结果(0,1,1,9,0) 是否还有另一个函数可以显示期望值?嗯,提取函数从日期/时间值中检索子字段,例如年或小时,而不是您想要的总时间,但我们可以自己构造结果,

我有一个包含区间数据的Postgres表,例如:

  • 0个月
  • 1个月
  • 1.5个月
  • 9个月
  • 一年
我想创建一个显示值的视图,但以总月份为单位(因此在我的示例中正确的值是:0、1、1.5、9、12)。我试过使用:

EXTRACT(MONTHS FROM "MyTable"."Interval"::INTERVAL)
但是,这产生了不正确的结果(0,1,1,9,0


是否还有另一个函数可以显示期望值?

嗯,
提取
函数从日期/时间值中检索子字段,例如年或小时,而不是您想要的总时间,但我们可以自己构造结果,如下所示:

postgres=# select * from month_table ;
   month    
------------
 0 month
 1 month
 1.5 months
 9 months
 1 year
 2 years
 1.5 years
(7 rows)

postgres=# select                     
    case when month ~ 'month' then regexp_replace(month,' month.*','')::numeric
         when month ~ 'year' then regexp_replace(month,' year.*','')::numeric * 12 end as months
from 
    month_table;
 months 
--------
      0
      1
    1.5
      9
     12
     24
   18.0
(7 rows)

谢谢,这真是太棒了!我只是在使用正则表达式时有点怀疑。我有一种内在的(可能不完全合乎逻辑的)感觉,边缘案例可能会出问题。。。但是我想没有一种内置的或更安全的方法,是吗?也许有,但是我已经检查了关于
时间/日期
进程功能的文档,没有找到,这是我现在唯一能想到的方法。如果您担心边缘情况,只需仔细检查您的数据,然后编写一个完美的正则表达式,它可以覆盖所有情况。祝您好运!:)