如何用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时:
extract(year from START_DATE)得到2018- 加上
10后得到2028 - 拼接
1231得到字符串20281231 - 通过
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
相关产品推荐
相关产品推荐

