首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将日期设置为31.12。使用SQL自动执行

将日期设置为31.12。使用SQL自动执行
EN

Stack Overflow用户
提问于 2018-05-30 19:01:16
回答 3查看 80关注 0票数 0

我有以下DATES_TABLE(id,start_date,duration_period)。我需要删除持续期间,并有一个字段的结束日期。

我正在使用以下脚本更新结束日期:

代码语言:javascript
复制
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中做到这一点?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-30 19:06:04

代码语言:javascript
复制
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周期。

代码语言:javascript
复制
update DATES_TABLE
   SET END_DATE =
       trunc(
           add_months (START_DATE, (DURATION_PERIOD + 1) * 12),
           'YYYY')
        - 1;
票数 1
EN

Stack Overflow用户

发布于 2018-05-30 19:09:49

如果我理解得很好,您可能需要以下内容:

代码语言:javascript
复制
update dates_table
set end_date = to_date('31-12-' || extract(year from add_months(start_date, duration_period *12)), 'dd-mm-yyyy') 
票数 0
EN

Stack Overflow用户

发布于 2018-05-30 19:17:57

试试这个:

代码语言:javascript
复制
update testdate
SET END_DATE = add_months (trunc(START_DATE,'y'),12)-1;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50602999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档