Oracle
 sql >> Base de données >  >> RDS >> Oracle

Détermination des dates de Pâques pour n'importe quelle année dans Oracle PLSQL

Déterminer les dates de Pâques pour n'importe quelle année dans Oracle PLSQL

ProblèmeVous souhaitez déterminer dynamiquement les dates de Pâques pour une année donnée.SolutionOracle ne fournit pas une seule fonction élégante pour effectuer les calculs de Pâques à votre place. Mais Oracle ne dispose pas de fonctions arithmétiques de date robustes que nous pouvons utiliser pour créer notre propre calculatrice de Pâques. Cela soulève la question, comment décidons-nous des dates de Pâques de toute façon ? Pour Pâques selon le calendrier grégorien, le dimanche de Pâques est le dimanche suivant la première pleine lune après le Carême. Les algorithmes contemporains traduisent cela au premier dimanche après la première pleine lune le 21 mars ou après. La fonction suivante renvoie la date du dimanche de Pâques pour une année spécifiée.;lunar_sync number;sunday_date number;epact number;day_of_month number;easter_offset number;begingolden_metonic :=mod(given_year,19) + 1;century :=(given_year / 100) + 1;leap_year_fix :=(3 * century / 4) - 12;lunar_sync :=((8 * siècle + 5)/25) - 5;sunday_date :=(5 * given_year / 4) - leap_year_fix - 3;epact :=mod((11 * golden_metonic + 20 + lunar_sync - leap_year_fix) ,30);if((epact =25 and golden_metonic <11) or (epact =24)) thenepact :=epact + 1;end if;jour_du_mois :=44 - epact;if(jour_du_mois <21) thenjour_du_mois :=jour_du_mois + 30;end if;easter_offset :=(day_of_month + 7 - mod((sunday_date + day_of_month),7)) - 1;return to_date('01-MAR-' || to_char(given_year),'DD -MON-YYYY') + easter_offset;end;/Nous aurions pu coder cela en SQL pur comme un ensemble imbriqué assez large d'instructions IF et CASE, mais cette fonction est à la fois plus facile à lire et plus facile à utiliser dans la pratique. Nous pouvons maintenant trouver Pâques pour une année donnée, telle que 2000 indiquée dans la prochaine instruction SQL.select easter_sunday(2000)from dual;EASTER_SUNDAY------------23-APR-00 Dimanche de Pâques pour l'année en cours sans qu'il soit nécessaire d'indiquer explicitement l'année. L'instruction SQL suivante illustre cela en action.select easter_sunday(extract(year from (sysdate)))from dual;EASTER_SUNDAY-------------

12-AVR-09