Високосный год

Напишите функцию, которая по дате определяет високосный год или нет

CREATE OR REPLACE FUNCTION leap_year_check(p_date IN DATE) RETURN INTEGER IS
  v_date DATE;
BEGIN
  SELECT to_date('29.02' || '.' || extract(YEAR FROM p_date), 'dd.mm.yyyy')
    INTO v_date
    FROM dual;

  RETURN 1;
EXCEPTION
  WHEN OTHERS THEN
    RETURN 0;
  
END leap_year_check;
/

Запрос на проверку даты:

SELECT leap_year_check(SYSDATE - 300) AS leap_year, SYSDATE - 300
  FROM dual;

Результат — FALSE (0):

0 27.02.2017 12:18:53
SELECT leap_year_check(SYSDATE - 500) AS leap_year, SYSDATE - 500
  FROM dual;

Результат — TRUE (1):

1 11.08.2016 12:19:33

P.S.
Конфигурация СУБД — Oracle Database 11g Express Edition Release 11.2.0.2.0
IDE — PL/SQL Developer Version 11.0.6.1776

Tags:

Comments are closed.