首页 > 解决方案 > 将所有日期更新为特定年份 - Oracle

问题描述

我在 oracle 表日期字段中有以下日期数据:

3/5/2007
6/3/2008
1/12/2011

我想将所有记录年份部分仅更新到 2020 年。所以输出将是:

3/5/2020
6/3/2020
1/12/2020

我尝试了以下方法,但这仅在所有源年份都具有相同年份并且在我的情况下不起作用时才更新:

update my_table
set datefield = datefield + INTERVAL '2' YEAR 

我想要某种以这种方式工作的更新语句(此示例不起作用):

update my_table
set datefield = mon(datefield) + day(datefield) + 2020

我在发布之前研究了这个问题。其他答案也指 add_months 在这种情况下似乎不起作用。

标签: oracleoracle11goracle10goracle-sqldeveloper

解决方案


您可以尝试将正确的年数添加到输入日期:

UPDATE my_table
SET datefield = ADD_MONTHS(datefield, 12*(2020 - EXTRACT(year FROM datefield)));

因此,在 2007-05-03 的情况下,EXTRACT上面的计算会发现 17 作为年份差,然后将正确的月数添加到 2003 以将年份调到 2020。


推荐阅读