こんにちは。


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

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

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

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/04/01 17:28:28
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:gizmo5 No.2

回答回数504ベストアンサー獲得回数141

ポイント166pt

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

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

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

id:stepwgn24z

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

2014/04/01 17:29:53

その他の回答2件)

id:pogpi No.1

回答回数428ベストアンサー獲得回数59

ポイント168pt

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

id:stepwgn24z

回答ありがとうございました。Scalaを使う方法はあとで勉強しようと思います。

2014/04/01 17:30:31
id:gizmo5 No.2

回答回数504ベストアンサー獲得回数141ここでベストアンサー

ポイント166pt

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

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

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

id:stepwgn24z

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

2014/04/01 17:29:53
id:snow0214 No.3

回答回数470ベストアンサー獲得回数116

ポイント166pt

問題の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');
id:stepwgn24z

回答有難うございました。今後の参考にしたいと思います。

2014/04/01 17:31:02

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません