Oracle11gを使っているのですが、DATE型のフィールドに日付を格納する際に、2014年で登録すべきところ、誤って
0014年の日付で登録してしまったテーブルがあります。
このテーブルには、数万件のレコードが格納されており、0014/03/27のレコードもあれば、0014/04/01のレコードもあります。
update文で、年の先頭2けたが00年のレコードを20年にするにはどういうSQL文を書けばよいのでしょうか?
よろしくお願いたします。
こんな感じのSQLで変更できると思います。
update 対象テーブル set 日付 = 日付 + interval '2000' year where to_char(日付,'yyyy') = '0014';
where 句にプライマリキーなどの条件を追加して、狭い範囲で動作を確認してから条件を緩くして実行してください。
バックアップを取っておいて元に戻せるようにしてください。
UPDATE テーブル名 SET 日付 = '2014-01-01' WHERE 日付 = '0014-01-01';を、Scalaを使うなどして365日分作ってください。
回答ありがとうございました。Scalaを使う方法はあとで勉強しようと思います。
こんな感じのSQLで変更できると思います。
update 対象テーブル set 日付 = 日付 + interval '2000' year where to_char(日付,'yyyy') = '0014';
where 句にプライマリキーなどの条件を追加して、狭い範囲で動作を確認してから条件を緩くして実行してください。
バックアップを取っておいて元に戻せるようにしてください。
回答有難うございました。このような方法があるのですね。色々と応用もできそうです。ありがとうございました。
問題の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');
回答有難うございました。今後の参考にしたいと思います。
回答有難うございました。このような方法があるのですね。色々と応用もできそうです。ありがとうございました。
2014/04/01 17:29:53