Xác định Ngày Lễ Phục sinh cho mọi năm trong Oracle PLSQL
Vấn đềBạn muốn xác định động các ngày của Lễ Phục sinh cho một năm nhất định .olutionOracle không cung cấp một hàm đơn giản, thanh lịch để thực hiện các phép tính Lễ Phục sinh cho bạn. Nhưng Oracle không có các hàm số học ngày tháng mạnh mẽ mà chúng ta có thể sử dụng để xây dựng máy tính Lễ Phục sinh của riêng mình. Điều này đặt ra câu hỏi, làm thế nào để chúng ta quyết định ngày của Lễ Phục sinh? Đối với Lễ Phục sinh theo lịch Gregory, Chủ nhật Phục sinh là Chủ nhật sau Mùa Chay đơn nguyên đầu tiên. Các thuật toán hiện đại dịch điều này thành Chủ nhật đầu tiên sau khi trăng tròn đầu tiên vào hoặc sau ngày 21 tháng 3.; số_tháng_năm; số_ngày_sinh_nghệ; số ngày_tháng; số_ngày_của_tháng; số_mục_sinh_ngày; begingolden_metonic:=mod (cho_năm, 19) + 1; thế kỷ:=(cho_năm / 100) + 1; năm_năm_năm:=(3 * thế kỷ / 4) - 12; Lunar_sync:=((8 * kỉ + 5) / 25) - 5; chủ nhật:=(5 * cho_năm / 4) - leap_year_fix - 3; epact:=mod ((11 * golden_metonic + 20 + Lunar_sync - leap_year_fix) , 30); if ((epact =25 và golden_metonic <11) hoặc (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 (cho_năm),' DD -MON-YYYY ') + exeter_offset; end; / Chúng ta có thể đã mã hóa điều này trong SQL thuần túy như một tập hợp các câu lệnh IF và CASE lồng nhau khá lớn, hàm này vừa dễ đọc hơn vừa dễ sử dụng hơn trong thực tế. Giờ đây, chúng tôi có thể tìm thấy Lễ Phục sinh cho bất kỳ năm nào, chẳng hạn như năm 2000 được hiển thị trong câu lệnh SQL tiếp theo. Chọn exeter_sunday (2000) từ kép; EASTER_SUNDAY ------------- 23-APR-00Chúng tôi cũng có thể xác định động Chủ nhật Phục sinh cho năm hiện tại mà không cần phải trình bày rõ ràng năm đó. Câu lệnh SQL tiếp theo minh họa điều này trong action.select exeter_sunday (trích xuất (năm từ (ngày tháng năm))) từ kép; EASTER_SUNDAY -------------12-APR-09