最简单的方法就是判断2月是28天还是29天
SELECT CASE TO_CHAR(LAST_DAY(TO_DATE(&YEAR || '02', 'YYYYMM')), 'dd')
WHEN '28' THEN
'不是闰年'
ELSE
'闰年'
END RU
FROM DUAL;
这种方法是很简单,一般正常使用也是没问题的。但是存在缺陷。按闰年的规则(四年一闰,百年不闰,四百年再闰)
比如上面的输入 1100这种是属于 百年不闰 的,但是返回的结果却是闰年。
这里改写方法。select case
when (MOD(&year, 4) = 0 and MOD(&year, 100) != 0) or --(四年一闰,百年不闰),(四百年再闰)
(MOD(&year, 400) = 0) then
'366'
else
'365'
end DAYS
from dual;
也就是多了层判断,这样是没有问题了的。