Calculate Easter Sunday Dynamically using SQL
DATE TABLESQLAUTOMATION
Dian Germishuizen
12/8/20222 min read
In any data warehousing or analytics solution, you will eventually need to generate a calendar table in order to perform time intelligence analytics.
One key aspect that most businesses will require is to view KPIs by working days only i.e. days when the business was operating normally. Each business will have their own unique rule sets as to what constitutes a work day, but there are a few standard rules that should apply to the vast majority (perhaps excluding retail).
Namely: Any day is a working day except
Weekends – Saturday & Sunday
Public Holidays
Weekends are pretty easy to identify, but public holidays not as much. Most public holidays are associated with fixed dates e.g. Christmas is always December 25th. But the most elusive one is Easter Sunday, because it does not occur on a fixed date each year.
In this post, I will demonstrate a technique to dynamically calculate the date of Easter Sunday so that you can allocate that public holiday dynamically on your calendar table in an SQL relational database system without the need for a manually curated list of public holidays.
Quick Maths
According to Wikipedia :
Easter is celebrated on the first Sunday after the Paschal full moon, which is the first full moon on or after 21 March (a fixed approximation of the March equinox). Determining this date in advance requires a correlation between the lunar months and the solar year, while also accounting for the month, date, and weekday of the Julian or Gregorian calendar.[4] The complexity of the algorithm arises because of the desire to associate the date of Easter with the date of the Jewish feast of Passover which, Christians believe, is when Jesus was crucified.
There are a few algorithms to calculate Easter Sunday taking the above into account. One such algorithm is the Meeus’s Julian algorithm.
Fellow SQL Nerd sqlsunday.com posted this article called “Calculating The Date Of Easter Sunday” on 2014-07-05.
He essentially took the Meeus’s Julian algorithm and SQL’ified it.
I then decided to alter his code to my own flavor of syntax to produce the below Scalar User Defined Function.
Scalar User Defined Function Version
Scalar User Defined Function Version
Table Valued User Defined Function Version
Table Valued User Defined Function Version
On the next episode of Dragon ball Z
These functions are nifty, but need to be incorporated into larger Calendar generation procedures.
Look out for future posts that show just how to do that.
Social
All content on this website is either created by us or is used under aa free to use license.. We create the posts here to help the community as best as we can. It doesn't mean we are always correct, or the methods we show here are the best. We all change and learn as we grow, so if you see something you think we could have done better, please reach out! Let's share the knowledge and be kind to each other!
DIAN
GDG
FRANS