sql >> Database >  >> RDS >> Oracle

De data van Pasen voor elk jaar bepalen in Oracle PLSQL

De datums van Pasen voor elk jaar bepalen  in Oracle PLSQL

Probleem U wilt de datums van Pasen voor een bepaald jaar dynamisch bepalen. Oplossing Oracle biedt geen enkele elegante functie om paasberekeningen voor u uit te voeren. Maar Oracle heeft wel degelijke rekenfuncties voor datums die we kunnen gebruiken om onze eigen paascalculator te bouwen. Dit roept de vraag op, hoe bepalen we eigenlijk de data van Pasen? Voor Pasen volgens de Gregoriaanse kalender is Paaszondag de zondag die volgt op de eerste volle maan na de vastentijd. Hedendaagse algoritmen vertalen dit naar de eerste zondag na de eerste volle maan op of na 21 maart. De volgende functie retourneert de datum van Paaszondag voor een bepaald jaar. Maak of vervang de functie easter_sunday (gegeven_jaargetal) retourneer dateasgolden_metonic number;century number;leap_year_fix number;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 * eeuw + 5)/25) - 5;sunday_date:=(5 * gegeven_jaar / 4) - leap_year_fix - 3;epact:=mod((11 * golden_metonic + 20 + lunar_sync - leap_year_fix) ,30);if((epact =25 en golden_metonic <11) or (epact =24)) thenepact :=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((sunday_date + day_of_month),7)) - 1;return to_date('01-MAR-' || to_char(given_year),'DD -MON-YYYY') + easter_offset;end;/We hadden dit in pure SQL kunnen coderen als een vrij grote geneste set IF- en CASE-instructies, maar deze functie is zowel gemakkelijker te lezen als in de praktijk gemakkelijker te gebruiken. We kunnen Pasen nu vinden voor een bepaald jaar, zoals 2000 getoond in de volgende SQL-instructie.select easter_sunday(2000)from dual;EASTER_SUNDAY-------------23-APR-00We kunnen ook dynamisch bepalen Paaszondag voor het lopende jaar zonder dat het jaar expliciet hoeft te worden vermeld. De volgende SQL-instructie illustreert dit in actie.select easter_sunday(extract(year from (sysdate)))from dual;EASTER_SUNDAY-------------

12-APR-09

  1. Python- en SQLite-waarschuwingen

  2. Elimineer duplicaten met de Oracle LISTAGG-functie

  3. Hoe krijg ik psycopg2-registratie van de uitvoeringstijd van de query?

  4. Hoe kap je alle tabellen in een database af met TSQL?