人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

こんにちは。

Oracle11gを使っているのですが、DATE型のフィールドに日付を格納する際に、2014年で登録すべきところ、誤って
0014年の日付で登録してしまったテーブルがあります。

このテーブルには、数万件のレコードが格納されており、0014/03/27のレコードもあれば、0014/04/01のレコードもあります。

update文で、年の先頭2けたが00年のレコードを20年にするにはどういうSQL文を書けばよいのでしょうか?

よろしくお願いたします。



●質問者: inu
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● pogpi
●168ポイント

UPDATE テーブル名 SET 日付 = '2014-01-01' WHERE 日付 = '0014-01-01';を、Scalaを使うなどして365日分作ってください。


inuさんのコメント
回答ありがとうございました。Scalaを使う方法はあとで勉強しようと思います。

2 ● gizmo5
●166ポイント ベストアンサー

こんな感じのSQLで変更できると思います。

update 対象テーブル
set 日付 = 日付 + interval '2000' year
where to_char(日付,'yyyy') = '0014';

where 句にプライマリキーなどの条件を追加して、狭い範囲で動作を確認してから条件を緩くして実行してください。
バックアップを取っておいて元に戻せるようにしてください。


inuさんのコメント
回答有難うございました。このような方法があるのですね。色々と応用もできそうです。ありがとうございました。

3 ● snow0214
●166ポイント

問題のDate型が入っているフィールドを [フィールド名] とします。

update [テーブル名] set [フィールド名]=ADD_MONTHS([フィールド名], 12*2000) where [フィールド名] >= TO_DATE('0014/01/01', 'YYYY/MM/DD') AND col <= TO_DATE('0014/12/31', 'YYYY/MM/DD');

inuさんのコメント
回答有難うございました。今後の参考にしたいと思います。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ