Oracle
 sql >> база данни >  >> RDS >> Oracle

Определяне на датите на Великден за всяка година в Oracle PLSQL

Определяне на датите на Великден за всяка година  в Oracle PLSQL

Проблем Бихте искали да определите динамично датите на Великден за дадена година.SolutionOracle не предоставя нито една елегантна функция за извършване на великденски изчисления вместо вас. Но Oracle има стабилни аритметични функции за дата, които можем да използваме, за да изградим собствен великденски калкулатор. Това повдига въпроса, как да решим датите на Великден? За Великден според григорианския календар Великденската неделя е неделята след първото пълнолуние след Великия пост. Съвременните алгоритми превеждат това в първата неделя след първото пълнолуние на или след 21 март. Следващата функция връща датата на Великденската неделя за определена година.create или replace function easter_sunday(given_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(given_year,19) + 1;century :=(date_year / 100) + 1;leap_year_fix :=(3 * век) 12;lunar_sync :=((8 * век + 5)/25) - 5; sunday_date :=(5 * дадена_година / 4) - високосна_година_fix - 3;epact :=mod((11 * golden_metonic + 20 + lunar_sync - високосна_година_fix) ,30);if((epact =25 и golden_metonic <11) или (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 :=(ден_на_месец + 7 - mod((дата_неделя + ден_на_месец),7)) - 1;връщане към_дата('01-МАР-' || to_char(given_year),'DD -MON-YYYY') + easter_offset;end;/Можехме да кодираме това в чист SQL като един доста голям вложен набор от оператори IF и CASE, но тази функция е по-лесна за четене и по-лесна за използване на практика. Вече можем да намерим Великден за всяка дадена година, като 2000, показана в следващото SQL изявление.изберете easter_sunday(2000)от двойно;EASTER_SUNDAY-------------23-APR-00Можем също така динамично да определим Великден за текущата година, без да е необходимо изрично да се посочва годината. Следващият SQL оператор илюстрира това в действие.select easter_sunday(extract(year from (sysdate)))from dual;EASTER_SUNDAY------------

12 април 2009 г.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да предавам динамично стойности към IN оператор?

  2. Инструменти за генериране на диаграма на база данни/ER диаграма от съществуваща база данни на Oracle?

  3. В oracle, как да променя сесията си да показва UTF8?

  4. ORA-01264:Не може да се създаде име на регистрационен файл

  5. Как да използвам WebDev.WebServer.exe (VS уеб сървър) в x64?