SQL - 如何将列的日期更新为另一列年份的最后一天



如果我有一个有效起始日期和一个有效截止日期列,我如何使有效截止日期列等于有效起始日期中任何年份的最后一天?

这是我的(但要长得多):

eff from      eff to
01/01/2013    12/31/2013
03/15/2007    03/31/2007
10/21/2014    10/20/2015
06/01/2005    05/31/2006

这是我想要的:

eff from      eff to
01/01/2013    12/31/2013
03/15/2007    12/31/2007
10/21/2014    12/31/2014
06/01/2005    12/31/2005

尝试更新eff到列,将其设置为12-31-YYYY,使用eff的YYYY从列

这个查询可能适合您:

update table_name set effective_date = last_day(add_months(from_date,12 - to_number(to_char(sysdate,'mm')))); 

因为12/31总是一年的最后一天…提取年份concat字符串并转换回日期。

Update TableName 
Set "EFF TO" = 
 to_date(extract(year from TO_DATE("eff from", 'yyyy/mm/dd'))||'12/31','yyyy/mm/dd') 
from dual;

这里有一个方便的参考,其中包含了Oracle的第一天/最后一天日期操作:http://programmerslounge.blogspot.com/2011/07/how-to-get-first-day-and-last-day-of.html

你可以简单地:

UPDATE Table1
SET eff_to = LAST_DAY(ADD_MONTHS(TRUNC("eff_from", 'Year'),11));

带有'Year'的TRUNC()将为您提供每年的第一天,再加上11个月将为您提供12月1日,而LAST_DAY()将为您提供月末。

update myTable set effTo = Date_Sub( 
    Date_add( 
     MakeDate(EXTRACT(YEAR FROM effFrom),1), 
     interval 1 year), 
     interval 1 day)

最新更新