sql >> データベース >  >> RDS >> Oracle

OraclePLSQLでの任意の年のイースターの日付の決定

    OraclePLSQLでの任意の年のイースターの日付の決定

    問題特定の年のイースターの日付を動的に決定したい。ソリューションOracleは、イースターの計算を実行するための単一の洗練された関数を提供していません。しかし、Oracleには、独自のイースター計算機を構築するために使用できる堅牢な日付算術関数があります。これは疑問を投げかけます、とにかくイースターの日付をどのように決定しますか?グレゴリオ暦の下のイースターの場合、イースターの日曜日は四旬節の後の最初の満月に続く日曜日です。最新のアルゴリズムは、これを3月21日以降の最初の満月後の最初の日曜日に変換します。次の関数は、指定された年のイースターサンデーの日付を返します。関数easter_sunday(given_year number)return dateasgolden_metonic number; Century number; Leap_year_fix number;lunar_sync番号;sunday_date番号;エパクト番号;day_of_month番号;easter_offset番号;begingolden_metonic:=mod(given_year、19)+ 1; Century:=(given_year / 100)+ 1; leap_year_fix:=(3*世紀/4)- 12; lunar_sync:=((8 * Century + 5)/ 25)-5; sunday_date:=(5 * give_year / 4)--leap_year_fix-3; epict:=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; 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; /これを純粋なSQLでIFステートメントとCASEステートメントのかなり大きなネストされたセットとしてコーディングすることもできますが、この関数は読みやすく、実際には使いやすいです。これで、次のSQLステートメントに示されている2000など、任意の年のイースターを見つけることができます。selecteaster_sunday(2000)from dual; EASTER_SUNDAY -------------23-APR-00動的に決定することもできます年を明示する必要なしに、今年のイースターサンデー。次のSQLステートメントは、これが実際に動作していることを示しています。selecteaster_sunday(extract(year from(sysdate)))from dual; EASTER_SUNDAY -------------

    2009年4月12日

    1. MySQLのインデックスを理解する:パート1

    2. マネージドPostgreSQLクラウドソリューションのベンチマーク-パート1:Amazon Aurora

    3. SQLServer2008の垂直方向のデータから水平方向へ

    4. MySQLはステータスを表示します-アクティブまたは合計接続?