2

我有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 中运行此命令?或者任何替代解决方案?

4

1 回答 1

4

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

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

严重地。

这将更新表中的所有行。

hiph- 显然-不需要连字符 ( )。只需在to_date().

正如所评论的,这会根据 ISO 格式为您的示例生成日期“2002-02-15”。
如果天数从1 月 1日开始,请改用该模式'YYYYDDD'
更多关于手册中的内容。

于 2012-11-05T01:55:53.523 回答