sql >> Database teknologi >  >> RDS >> Oracle

Bestemmelse af påskedatoerne for ethvert år i Oracle PLSQL

Sådan bestemmes påskens datoer for ethvert år i Oracle PLSQL

ProblemDu vil gerne dynamisk bestemme datoerne for påsken for et givet år.SolutionOracle giver ikke en enkelt elegant funktion til at udføre påskeberegninger for dig. Men Oracle har robuste dato-aritmetiske funktioner, som vi kan bruge til at bygge vores egen påskeberegner. Dette rejser spørgsmålet, hvordan bestemmer vi overhovedet datoen for påsken? Til påske under den gregorianske kalender er påskesøndag søndagen efter den første fuldmåne efter fasten. Nutidige algoritmer oversætter dette til den første søndag efter den første fuldmåne den 21. marts eller senere. Den næste funktion returnerer datoen for påskesøndag for et specificeret år.opret eller erstat funktionen påskesøndag(givet_årtal) returdatoergyldent_metonisk tal;århundredetal;springår_fixnummer;lunar_sync number;søndagsdatonummer;epaktnummer;day_of_month number;easter_offset number;begingolden_metonic :=mod(givet_year,19) + 1;century :=(givet_year / 100) + 1;leap_year_fix :=(3 * århundrede / 4) 12;lunar_sync :=((8 * århundrede + 5)/25) - 5; søndagsdato :=(5 * given_year / 4) - leap_year_fix - 3;epact :=mod((11 * golden_metonic + 20 + lunar_sync - leap_year_fix) ,30);if((epact =25 og golden_metonic <11) eller (epact =24)) thenepact :=epact + 1;end 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;retur to_date('01-MAR-' || to_char(given_year),'DD -MON-YYYY') + easter_offset;end;/Vi kunne have kodet dette i ren SQL som et ret stort indlejret sæt af IF- og CASE-sætninger, men denne funktion er både lettere at læse og lettere at bruge i praksis. Vi kan nu finde påsken for ethvert givet år, såsom 2000 vist i den næste SQL-sætning.select easter_sunday(2000)from dual;EASTER_SUNDAY-------23-APR-00Vi kan også bestemme dynamisk Påskesøndag for indeværende år uden at skulle udtrykke året. Den næste SQL-sætning illustrerer dette i action.select easter_sunday(extract(year from (sysdate))) from dual;EASTER_SUNDAY-------

12-APR-09

  1. 2 eksempeldatabaser til SQLite

  2. Database muligheder/pakker brugsrapportering

  3. Ændre på Big Table i RDS Løsning til tabel fuld fejl

  4. Hvordan opretter man tabel ved hjælp af udvælgelsesforespørgsel i SQL Server?