Postgresql 总月数的研究后间隔
我有一个包含区间数据的Postgres表,例如: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) 是否还有另一个函数可以显示期望值?嗯,提取函数从日期/时间值中检索子字段,例如年或小时,而不是您想要的总时间,但我们可以自己构造结果,
- 0个月
- 1个月
- 1.5个月
- 9个月
- 一年
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)
谢谢,这真是太棒了!我只是在使用正则表达式时有点怀疑。我有一种内在的(可能不完全合乎逻辑的)感觉,边缘案例可能会出问题。。。但是我想没有一种内置的或更安全的方法,是吗?也许有,但是我已经检查了关于
时间/日期
进程功能的文档,没有找到,这是我现在唯一能想到的方法。如果您担心边缘情况,只需仔细检查您的数据,然后编写一个完美的正则表达式,它可以覆盖所有情况。祝您好运!:)