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