Oracle SQL动态计算日期差:如何实现剩余天数的计算
Oracle SQL计算入职日期与当前日期的年、月、日差值
要准确计算剩余天数,需基于已算出的年数和剩余月数,将入职日期向后推对应年月,再用当前日期减去该推后日期,自动适配不同月份28/29/30/31天的差异。
完整实现代码
SELECT employee_id, last_name, hire_date, -- 计算年数 TRUNC(MONTHS_BETWEEN(SYSDATE, hire_date) / 12) AS years, -- 计算剩余月数 TRUNC(MOD(MONTHS_BETWEEN(SYSDATE, hire_date), 12)) AS remaining_months, -- 计算剩余天数:将入职日期推years年+remaining_months月后,与当前日期做差 TRUNC(SYSDATE) - TRUNC(ADD_MONTHS(hire_date, TRUNC(MONTHS_BETWEEN(SYSDATE, hire_date)/12)*12 + TRUNC(MOD(MONTHS_BETWEEN(SYSDATE, hire_date), 12)))) AS remaining_days FROM employees;
逻辑说明
ADD_MONTHS()函数会自动处理月份天数边界问题:比如从1月31日加1个月,会根据目标年份2月的实际天数调整为28或29日;从4月30日加1个月会自动对应到5月30日,完全贴合实际日历规则。- 用
TRUNC()截断日期的时间部分后做减法,得到的是两个日期之间的整数天数差,确保结果精准无误差。
内容的提问来源于stack exchange,提问作者Moustafa Youssef
相关产品推荐
相关产品推荐

