sql >> Databasteknik >  >> RDS >> Oracle

Bestämma datum för påsk för vilket år som helst i Oracle PLSQL

Bestämma datum för påsk för alla år i Oracle PLSQL

ProblemDu vill dynamiskt bestämma datumen för påsk för ett givet år.SolutionOracle tillhandahåller inte en enda elegant funktion för att utföra påskberäkningar åt dig. Men Oracle har robusta datumaritmetiska funktioner som vi kan använda för att bygga vår egen påskräknare. Detta väcker frågan, hur bestämmer vi datumen för påsken ändå? För påsk enligt den gregorianska kalendern är påskdagen söndagen efter den första fullmånen efter fastan. Samtida algoritmer översätter detta till den första söndagen efter den första fullmånen den 21 mars eller senare. Nästa funktion returnerar datumet för påskdagen för ett angivet år. skapa eller ersätt funktionen easter_sunday(givet_year number) return 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(givet_year,19) + 1;century :=(givet_year / 100) + 1;leap_year_fix :=(3 * sekel / 4) 12;lunar_sync :=((8 * århundrade + 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 och golden_metonic <11) eller (epact =24)) thenepact :=epact + 1;slut if;day_of_month :=44 - epact;if(day_of_month <21) thenday_of_th :=day_of_th 30;end if;easter_offset :=(day_of_month + 7 - mod((sunday_date + day_of_th),7)) - 1;return to_date('01-MAR-' || to_char(given_year),'DD -MON-YYYY') + easter_offset;end;/Vi kunde ha kodat detta i ren SQL som en ganska stor uppsättning av IF- och CASE-satser, men den här funktionen är både lättare att läsa och enklare att använda i praktiken. Vi kan nu hitta påsk för vilket år som helst, till exempel 2000 som visas i nästa SQL-sats.select easter_sunday(2000)from dual;EASTER_SUNDAY-------23-APR-00Vi kan också dynamiskt bestämma Påskdagen för innevarande år utan att behöva ange året uttryckligen. Nästa SQL-sats illustrerar detta i action.select easter_sunday(extract(year from (sysdate)))from dual;EASTER_SUNDAY-------

12-APR-09

  1. Villkorligt definiera en markör

  2. Migrera en Microsoft Access-databas till SQL Server

  3. Microsoft Access Web App vs Desktop Database

  4. SQL Server Index Användningsstatistik