如何在Oracle数据库中查询上一个月份的天数?
在Oracle数据库中获取上一个月份总天数的方法
嘿,我来给你分享几个在Oracle里快速获取上个月总天数的实用方案,都是日常开发里常用的:
方法一:利用LAST_DAY + EXTRACT(最常用)
这是最直观的方法,核心是先找到上个月的最后一天,再提取它的日期数值:
SELECT EXTRACT(DAY FROM LAST_DAY(ADD_MONTHS(SYSDATE, -1))) AS last_month_total_days FROM DUAL;
逻辑解释:
ADD_MONTHS(SYSDATE, -1):把当前日期往前推一个月,得到上个月的当前日期LAST_DAY(...):获取这个日期所在月份的最后一天(比如上个月是2024年2月的话,就会返回2024-02-29)EXTRACT(DAY FROM ...):提取最后一天的“日”部分,也就是这个月的总天数
方法二:通过计算两个月第一天的差值
另一种思路是用当月第一天减去上个月第一天,得到的天数差就是上个月的总天数:
SELECT (TRUNC(SYSDATE, 'MM') - TRUNC(ADD_MONTHS(SYSDATE, -1), 'MM')) AS last_month_total_days FROM DUAL;
逻辑解释:
TRUNC(SYSDATE, 'MM'):截断当前日期到当月第一天(比如今天是2024-04-10,就返回2024-04-01)TRUNC(ADD_MONTHS(SYSDATE, -1), 'MM'):得到上个月的第一天(比如2024-03-01)- 两个日期直接相减,Oracle会返回天数差,也就是上个月的总天数
方法三:针对指定日期获取其上一个月的天数
如果不是基于当前日期,而是要获取某个特定日期的上一个月天数,只需要把SYSDATE换成目标日期即可:
-- 示例:获取2024-03-15的上一个月(2024年2月)的总天数 SELECT EXTRACT(DAY FROM LAST_DAY(ADD_MONTHS(TO_DATE('2024-03-15', 'YYYY-MM-DD'), -1))) AS last_month_total_days FROM DUAL;
小提示
以上方法都能自动处理闰年的情况,比如2024年的2月会正确返回29天,不用额外写判断逻辑~
内容的提问来源于stack exchange,提问作者Pavan
相关产品推荐
相关产品推荐

