1

年を2013年に変更したいのですが、残りの月、日などは変更したくありません。

テーブルのすべての行に対してこれを実行したい

私は次を使用して「x」年を追加できることを知っています:

 Set date = date+ x YEAR  in the update statement

しかし、元の年の値に関係なく、2013年の一定の値を達成する方法がわかりません

4

2 に答える 2

3

うるう年で何をしたいのかを明確に述べていません。これは重要である可能性があります(彼らはどちらの方向に進むでしょうか?)。ただし、基本的な形式は非常に単純です。

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 
于 2012-11-14T23:09:15.850 に答える
-1

デュアルからto_date( '2014 /'|| to_char(sysdate、'mm / dd HH24:MI:SS')、'yyyy / mm / dd HH24:MI:SS')を選択します。

于 2012-11-14T21:15:23.547 に答える