1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

IS_LEAP_YEAR 閏年チェック

Last updated at Posted at 2020-11-20

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>
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?