2

データベースに保存されているファイルMOD17A1.A2002047.h20v09.058.2007117021342.hdfがあります。そのようなファイル名の列があります(列の名前は_filename_)。ファイル名は2002年の47日を意味します。ファイル名ごとに個別の列に2002047日付を抽出する必要があります。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 に答える