sql >> Base de Datos >  >> RDS >> Oracle

Determinación de las fechas de Pascua para cualquier año en Oracle PLSQL

Determinación de las fechas de Pascua para cualquier año en Oracle PLSQL

Problema Le gustaría determinar dinámicamente las fechas de Semana Santa para un año determinado. Solución Oracle no proporciona una función única y elegante para realizar los cálculos de Semana Santa por usted. Pero Oracle tiene funciones aritméticas de fecha robustas que podemos usar para construir nuestra propia calculadora de Pascua. Esto plantea la pregunta, ¿cómo decidimos las fechas de la Pascua de todos modos? Para la Pascua bajo el calendario gregoriano, el Domingo de Pascua es el domingo siguiente a la primera luna llena después de la Cuaresma. Los algoritmos contemporáneos traducen esto al primer domingo después de la primera luna llena del 21 de marzo o después.;número de sincronización lunar;número de fecha_domingo;número epact;número de día_del_mes;número de compensación_de_pascua;begingolden_metonic :=mod(given_year,19) + 1;siglo :=(given_year / 100) + 1;leap_year_fix :=(3 * century / 4) - 12;lunar_sync :=((8 * siglo + 5)/25) - 5;domingo_fecha :=(5 * año_dado / 4) - bisiesto_año_fijo - 3;epact :=mod((11 * golden_metonic + 20 + lunar_sync - bisiesto_año_fijo) ,30);if((epact =25 and golden_metonic <11) or (epact =24)) thepact :=epact + 1;end if;day_of_month :=44 - epact;if(day_of_month <21) thenday_of_month :=day_of_month + 30;end if;easter_offset :=(day_of_month + 7 - mod((domingo_date + day_of_month),7)) - 1;return to_date('01-MAR-' || to_char(dado_año),'DD -MON-YYYY') + easter_offset;end;/ Podríamos haber codificado esto en SQL puro como un conjunto anidado bastante grande de declaraciones IF y CASE, pero esta función es más fácil de leer y usar en la práctica. Ahora podemos encontrar Easter para cualquier año dado, como 2000 que se muestra en la siguiente declaración SQL. Domingo de Resurrección del año en curso sin necesidad de indicar explícitamente el año. La siguiente instrucción SQL ilustra esto en acción. seleccione domingo_de_pascua(extract(año desde (sysdate)))from dual;DOMINGO_DE_PASCUA-------------

12-ABR-09