我有以下DATES_TABLE(id,start_date,duration_period)。我需要删除持续期间,并有一个字段的结束日期。
我正在使用以下脚本更新结束日期:
alter table DATES_TABLE add END_DATE date;
update DATES_TABLE
SET END_DATE = add_months (START_DATE, DURATION_PERIOD * 12);
如果开始日期为01.01.2018,预测持续时间为10,则结束日期将设置为01.01.2028。这是正确的,但是结束日期需要设置为一年中的最后一天,即31.12.2028。在所有情况下,年份都应该更改,但日期应该是31,月份应该是12月。
我如何在sql中做到这一点?
谢谢。
发布于 2018-05-30 19:06:04
update DATES_TABLE
SET END_DATE =
trunc(
add_months(
add_months (START_DATE, DURATION_PERIOD * 12),
12),
'YYYY')
- 1;
当心这个日期,在31/12/NNNN 00:00:00之后的同一年还有一整天。如果你想迎合这一点,只需减去一秒iso即可。总有一天。
正如Elyor所指出的,我仍然在那里浪费一些cpu周期。
update DATES_TABLE
SET END_DATE =
trunc(
add_months (START_DATE, (DURATION_PERIOD + 1) * 12),
'YYYY')
- 1;
发布于 2018-05-30 19:09:49
如果我理解得很好,您可能需要以下内容:
update dates_table
set end_date = to_date('31-12-' || extract(year from add_months(start_date, duration_period *12)), 'dd-mm-yyyy')
发布于 2018-05-30 19:17:57
试试这个:
update testdate
SET END_DATE = add_months (trunc(START_DATE,'y'),12)-1;
https://stackoverflow.com/questions/50602999
复制相似问题