2016-06-17 5 views

答えて

4
UPDATE temp 
SET temp_date = temp_date - interval '2 years' 
WHERE EXTRACT (YEAR FROM temp_date) = 2018; 

正確な年に設定する場合は、あなたがすべてでWHERE句を使用していない場合は、あなたのWHERE句は今年以外のものを使用した場合、または:

UPDATE temp 
SET temp_date = temp_date + 
    (2016 - EXTRACT(YEAR FROM temp_date) || ' years')::interval 
WHERE foo = 'bar'; 

詳細については、the mailing listを参照してください。

+0

どのようにしたい場合はすることができますいくつかの年を追加? –

+0

私は想像していると思いますが、 SET temp_date = temp_date + interval '2 years' どこのエキストラート(temp_dateから)= 2018; –

+0

'interval 'を使用して' interval'のように 'timestamp'の値から任意の時間量を加算または減算することができます。これは2年5ヶ月-1日12時間4秒です。 – Patrick

1

試してみてください。

UPDATE temp 
    SET temp_date = temp_date - (date_trunc('year', temp_date) - date '2016-1-1') 

以上更新が
が残り、日付部分(月 - 日 - 時間など)を残して、テーブル内のすべての日付に「2016」を割り当て、そのまま

+0

これは質問には触れません。さらに、_all_行は、年がすでに2016年になっていても更新されますが、それは大きなテーブルでは非常に非効率的です。そして、2014年の 'temp_date'はどうでしょうか? – Patrick

+0

@Patrick、あなたは絶対に正しいです、これは非常に非常に非常に非効率的です。しかし誰もが簡単な 'WHERE'条件を使ってこの問題を非常に簡単に解決できます。 「2014」に関しては、2016年にも「置き換えられました」と、このクエリで遊んでください。 – krokodilko

+0

それは別のケースでは、感謝を使用することができます! –

関連する問題