年を2013年に変更したいのですが、残りの月、日などは変更したくありません。
テーブルのすべての行に対してこれを実行したい
私は次を使用して「x」年を追加できることを知っています:
Set date = date+ x YEAR in the update statement
しかし、元の年の値に関係なく、2013年の一定の値を達成する方法がわかりません
うるう年で何をしたいのかを明確に述べていません。これは重要である可能性があります(彼らはどちらの方向に進むでしょうか?)。ただし、基本的な形式は非常に単純です。
UPDATE <table> SET <column> = <column> + (2013 - YEAR(<column)) YEARS
例(すべてのステートメントはローカルiSeriesで実行および検証されます):
CREATE TABLE QTEMP/Example (initial TIMESTAMP NOT NULL WITH DEFAULT,
updated TIMESTAMP NOT NULL WITH DEFAULT)
INSERT INTO Example VALUES(CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(TIMESTAMP(DATE('2012-02-29'), CURRENT_TIME),
TIMESTAMP(DATE('2012-02-29'), CURRENT_TIME)),
(TIMESTAMP(DATE('2012-02-28'), CURRENT_TIME),
TIMESTAMP(DATE('2012-02-28'), CURRENT_TIME)),
(TIMESTAMP(DATE('2012-03-31'), CURRENT_TIME),
TIMESTAMP(DATE('2012-02-31'), CURRENT_TIME)),
(TIMESTAMP(DATE('2013-05-08'), CURRENT_TIME),
TIMESTAMP(DATE('2013-05-08'), CURRENT_TIME)),
(TIMESTAMP(DATE('2014-09-20'), CURRENT_TIME),
TIMESTAMP(DATE('2014-09-20'), CURRENT_TIME)),
結果の初期データ:
initial updated
2012-11-14-15.05.58.246187 2012-11-14-15.05.58.246187
2012-02-29-15.05.58.000000 2012-02-29-15.05.58.000000
2012-02-28-15.05.58.000000 2012-02-28-15.05.58.000000
2012-03-01-15.05.58.000000 2012-03-01-15.05.58.000000
2013-05-08-15.05.58.000000 2013-05-08-15.05.58.000000
2014-09-20-15.05.58.000000 2014-09-20-15.05.58.000000
実際の声明
UPDATE Example SET updated = updated + (2013 - YEAR(updated)) YEARS
WHERE YEAR(updated) <> 2013
その結果:
initial updated
2012-11-14-15.05.58.246187 2013-11-14-15.05.58.246187
2012-02-29-15.05.58.000000 2013-02-28-15.05.58.000000
2012-02-28-15.05.58.000000 2013-02-28-15.05.58.000000
2012-03-01-15.05.58.000000 2013-03-01-15.05.58.000000
2013-05-08-15.05.58.000000 2013-05-08-15.05.58.000000
2014-09-20-15.05.58.000000 2013-09-20-15.05.58.000000
デュアルからto_date( '2014 /'|| to_char(sysdate、'mm / dd HH24:MI:SS')、'yyyy / mm / dd HH24:MI:SS')を選択します。