首页 > 解决方案 > 将日期设置为 31.12。自动使用 SQL

问题描述

我有以下 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中做到这一点?

谢谢你。

标签: sqloracledate

解决方案


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;

推荐阅读