You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL自动将结束日期设为对应年份的12月31日?

解决方案

没问题,我来帮你调整SQL语句,实现把结束日期统一设为目标年份的12月31日。

核心思路是:先从START_DATE中提取出年份,加上DURATION_PERIOD得到目标年份,然后直接构造该年份的12月31日作为END_DATE。从你使用add_months()函数判断,应该是Oracle数据库,具体实现如下:

-- 新增END_DATE字段
alter table DATES_TABLE add END_DATE date;

-- 更新END_DATE为目标年份的12月31日
update DATES_TABLE 
SET END_DATE = to_date(
    (extract(year from START_DATE) + DURATION_PERIOD) || '1231', 
    'YYYYMMDD'
);

验证示例

当START_DATE是01.01.2018、DURATION_PERIOD为10时:

  1. extract(year from START_DATE)得到2018
  2. 加上10后得到2028
  3. 拼接1231得到字符串20281231
  4. 通过to_date()转成日期就是31.12.2028,完全符合你的需求。

另一种实现方式

你也可以用日期截断和last_day()函数来实现,逻辑同样清晰:

update DATES_TABLE 
SET END_DATE = last_day(add_months(trunc(START_DATE, 'YYYY'), DURATION_PERIOD * 12 + 11));

这里的逻辑是:

  • trunc(START_DATE, 'YYYY')把起始日期截断到当年1月1日
  • add_months(..., DURATION_PERIOD *12 +11)往后推DURATION_PERIOD年再加11个月,得到目标年份的12月1日
  • last_day()取该月的最后一天,也就是12月31日

内容的提问来源于stack exchange,提问作者green

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:13:51