如果我有一个有效起始日期和一个有效截止日期列,我如何使有效截止日期列等于有效起始日期中任何年份的最后一天?
这是我的(但要长得多):
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)