Oracle判断是否闰年

判断一年是否是闰年,我们小学就知道了:能被4除尽的就是闰年,除不尽的就是平年。

今天教主说,判断一年是否为闰年,看二月的月末是哪一天就可以了,28就是平年,29就是闰年,我去真是人才。

好吧,我想了一下判断是否为闰年的方法还是挺多的,看看Oracle都是怎样实现的。


1、最常规的,先求出年份,然后除以4,能除尽就是闰年,除不尽就是平年

SELECT (CASE 
MOD(to_number(to_char(SYSDATE,'yyyy')),4)--MOD为求余函数
WHEN 0 THEN '闰年' ELSE '平年' END) 年 
  FROM dual;

2、判断2月最后一天的日期,28就是平年,29就是闰年

SELECT (CASE to_char(--用TO_CHAR取出日期
last_day(--LAST_DAY函数为求所在月份最后一天的日期
add_months(--ADD_MONTHS函数为加月份数,1月1日加1个月就是2月1日
TRUNC(SYSDATE,'yy'),1)),'dd')--用TRUNC函数求年初第一天,也就是1月1日
WHEN '28' THEN '平年' ELSE '闰年' END) 年 
  FROM dual;

3、判断当年的天数,365是平年,366是闰年

SELECT (CASE TRUNC(add_months(SYSDATE,12),'yy')--当前时间加12个月,能确保是明年这个时间,再求明年1月1日
-TRUNC(SYSDATE,'yy') --再减去今年1月1日,就是今年的天数
WHEN 365 THEN '平年' ELSE '闰年' END) 年 
  FROM dual;

4、判断2月28日的后一天(也就是年初第60天)所在的月份,如果还在2月份,那说明是2月29日,如果在3月份就说明是3月1日了

SELECT (CASE to_char(TRUNC(SYSDATE,'yy')+59,'mm')--第60天,所以加59 
WHEN '03' THEN '平年' ELSE '闰年' END) 年 FROM dual;

总结:一种需求,可以用多种方法解决,不仅可以寻求更高效率的方法,还能发散自己的思维。第四种方法简单好记,可以记起来面试用啦。。。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值