天天看點

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;
           

總結:一種需求,可以用多種方法解決,不僅可以尋求更高效率的方法,還能發散自己的思維。第四種方法簡單好記,可以記起來面試用啦。。。