从一年中的某一天提取日期并将其放在单独的列中

时间:2012-11-05 01:32:15

标签: postgresql datetime

我的文件MOD17A1.A2002047.h20v09.058.2007117021342.hdf存储在我的数据库中。我有一个像这样的文件名的列(列的名称是_filename_)。文件名中的2002047表示2002年的第47天。我必须将日期格式中的日期(如2002-02-16)提取到每个文件名的单独列中。

我提出了这个解决方案:

with S as (
   select (select substring(filename from 10 for 4) || (select hiph)
          || (select substring(filename from 14 for 3))) as D
  ,mytable.rid as s_rid from mytable)
update mytable
set date_column = (select (to_date(d , 'IYYY-IDDD')')::date)
from S
where id=s_id

此解决方案的唯一问题是我需要一个列_hiph_,其中所有值均为'-'。有没有办法在没有_hiph_列的情况下在postgresql中运行此命令?或者任何替代解决方案?

1 个答案:

答案 0 :(得分:4)

解开这个怪物后,我能够简化它......有点......

UPDATE mytable
SET    date_column = to_date(substr(filename, 10, 7), 'IYYYIDDD');

严重。

这会更新表格中的所有行。

hiph - 显然不需要连字符(-)。只需在to_date()中修改您的模式。

如评论所述,这会根据ISO格式为您的示例生成日期'2002-02-15' 如果天数以 Jan开头。第1个使用模式'YYYYDDD'代替 More about that in the manual.