【问题标题】:Extracting date from day of the year and put it in a separate column从一年中的某一天提取日期并将其放在单独的列中
【发布时间】:2012-11-05 01:32:15
【问题描述】:

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

【问题讨论】:

  • 您想要一年中的 ISO 日(从 ISO 第一周的星期一开始)还是一年中的普通日?使用 ISO,您的示例将是 2002-02-15not 2002-02-16

标签: postgresql datetime


【解决方案1】:

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

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

说真的。

这会更新表中的所有行。

hiph - 显然不需要连字符 (-)。只需在 to_date() 中调整您的模式即可。

如评论所述,这会根据 ISO 格式为您的示例生成日期“2002-02-15”。
如果天数从 Jan 开始。第一个改用'YYYYDDD'模式。
More about that in the manual.

【讨论】:

  • 谢谢。我必须使用'YYYYDDD'。这给了我所需的结果。
猜你喜欢
  • 2016-01-22
  • 2023-04-02
  • 1970-01-01
  • 2013-09-12
  • 2012-12-06
  • 2020-10-05
  • 2014-08-03
  • 2021-11-10
  • 2013-04-13
相关资源
最近更新 更多