判断一年是否是闰年,我们小学就知道了:能被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;
总结:一种需求,可以用多种方法解决,不仅可以寻求更高效率的方法,还能发散自己的思维。第四种方法简单好记,可以记起来面试用啦。。。