Oracle 11g中计算日期月差并更新test1表VALUE列的SQL语句求助
Oracle UPDATE语句:计算日期月数差更新VALUE列
根据需求,我们需要计算指定日期与P_DATE的月份差来更新TEST1表的VALUE列。结合预期结果,这里的月份差是从P_DATE所在月份到绑定变量:D2(2022-12-30)的总月份数(包含两端月份),可以通过Oracle的MONTHS_BETWEEN函数配合向上取整实现。
最终UPDATE语句
场景1:仅更新P_DATE介于:D1和:D2之间的行
UPDATE TEST1 SET VALUE = CEIL(MONTHS_BETWEEN(:D2, P_DATE)) WHERE P_DATE BETWEEN :D1 AND :D2;
场景2:更新所有行(匹配预期结果中的全量更新)
如果需要更新表中所有行(如示例中WEAVING MACHINE的P_DATE不在:D1和:D2区间但仍需更新),可以去掉WHERE子句:
UPDATE TEST1 SET VALUE = CEIL(MONTHS_BETWEEN(:D2, P_DATE));
函数说明
MONTHS_BETWEEN(date1, date2):返回date1和date2之间的月份数,结果为小数(会考虑日期间的天数差异)。CEIL():对MONTHS_BETWEEN的结果向上取整,确保即使日期未到月末,也能计入当前月份(例如07-APR-22到30-DEC-22的月份差为8.74,向上取整后为9,匹配预期结果)。
验证示例
以CHAIR记录为例:
P_DATE为07-APR-22,:D2为30-DEC-22MONTHS_BETWEEN('30-DEC-2022', '07-APR-2022')返回约8.74CEIL(8.74)得到9,与预期VALUE值一致。
内容的提问来源于stack exchange,提问作者Shafiq Malik
相关产品推荐
相关产品推荐

