Oracle18C
CREATE OR REPLACE FUNCTION IS_LEAP_YEAR
(
IN_YEAR IN DATE -- 調査年
)
RETURN VARCHAR2 -- 'OK' : 閏年 or 'NG' : 閏年ではない
--
-- 閏年チェック
--
IS
L_DATE DATE ;
BEGIN
-- 閏年か否かはその年の2月29日がTO_DATEで例外にならないかで判断できる。
L_DATE := TO_DATE(TO_CHAR(IN_YEAR, 'YYYY') || '0229', 'YYYYMMDD') ;
RETURN('OK') ;
EXCEPTION
WHEN OTHERS THEN
RETURN('NG') ;
END IS_LEAP_YEAR ;
/
SQL> COLUMN IS_LEAP_YEAR FORMAT A2
SQL> SELECT B.YEARS
2 , IS_LEAP_YEAR(TO_DATE(TO_CHAR(B.YEARS, 'FM0000'), 'YYYY')) AS IS_LEAP_YEAR
3 FROM(
4 -- NUMBER FROM ~ TO
5 SELECT A.YEAR_FROM + ROWNUM - 1 AS YEARS
6 , A.YEAR_TO
7 FROM(
8 SELECT 1990 AS YEAR_FROM -- 開始年
9 , 2100 AS YEAR_TO -- 最終年
10 FROM DUAL
11 ) A
12 CONNECT BY LEVEL <= A.YEAR_TO - A.YEAR_FROM + 1 -- 階層問合せ
13 ) B ;
YEARS IS
------------- --
1990 NG
1991 NG
1992 OK
1993 NG
1994 NG
1995 NG
1996 OK
1997 NG
1998 NG
1999 NG
2000 OK
2001 NG
2002 NG
2003 NG
2004 OK
2005 NG
2006 NG
2007 NG
2008 OK
2009 NG
2010 NG
2011 NG
2012 OK
2013 NG
2014 NG
2015 NG
2016 OK
2017 NG
2018 NG
2019 NG
2020 OK
2021 NG
2022 NG
2023 NG
2024 OK
2025 NG
2026 NG
2027 NG
2028 OK
2029 NG
2030 NG
2031 NG
2032 OK
2033 NG
2034 NG
2035 NG
2036 OK
2037 NG
2038 NG
2039 NG
2040 OK
2041 NG
2042 NG
2043 NG
2044 OK
2045 NG
2046 NG
2047 NG
2048 OK
2049 NG
2050 NG
2051 NG
2052 OK
2053 NG
2054 NG
2055 NG
2056 OK
2057 NG
2058 NG
2059 NG
2060 OK
2061 NG
2062 NG
2063 NG
2064 OK
2065 NG
2066 NG
2067 NG
2068 OK
2069 NG
2070 NG
2071 NG
2072 OK
2073 NG
2074 NG
2075 NG
2076 OK
2077 NG
2078 NG
2079 NG
2080 OK
2081 NG
2082 NG
2083 NG
2084 OK
2085 NG
2086 NG
2087 NG
2088 OK
2089 NG
2090 NG
2091 NG
2092 OK
2093 NG
2094 NG
2095 NG
2096 OK
2097 NG
2098 NG
2099 NG
2100 NG
111行が選択されました。
SQL> COLUMN IS_LEAP_YEAR CLEAR
SQL>