sql - 将日期设置为 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中做到这一点?
谢谢你。
解决方案
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;
推荐阅读
- scala - Spark:使用广播变量的正确方法是什么?
- google-cloud-platform - 谷歌云语音 API 中的无效音频源错误
- git - 如何为 prestashop 1.7 创建 .gitignore 文件
- javascript - 如何在extjs中加载视频
- msbuild - 如何从发布中排除某些 appsettings 文件
- r - 在ggplot2中绘制拟合的Exgaussian密度曲线
- typescript - Vue 有时会观察到 TypeScript getter,有时则不会
- c - 将文件文本放入 C 中的变量中
- apache-spark - Spark Structured Streaming, Executor 因广播堆积导致内存不足失败
- javascript - Angular 5:如何使用 jsPlumb 使动态创建的组件可拖动?