How to get all Fridays for year 2007?
What an unusual request. Hard to imagine where a table of Friday dates might be required. Nevertheless, ask an SQL question, and you will get an SQL answer.
With SQL, we are concerned with sets. The set we need here is a set of Friday dates. We're going to generate these by adding multiples of 7 to the date of the first Friday of the year.
To do this, we'll need the numbers 0 through 51, which will be the multiples of 7 we want to add. We can get these by a familar technique involving a numbers table. For example, see The Integers table (28 January, 2004), which explains how to generate the numbers 0 through 999 using a three-way cross join of the integers from 0 through 9. We'll use a similar join here, slightly simpler because we only need 52 numbers.
The other part of the problem is to determine the first Friday of the year. Let's assign a number to the days of the week, so that Sunday=1, Monday=2, and so on, up to Saturday=7. Obtain this weekday number for January 1st of the year in question, subtract this number from 13, and take the modulus with respect to 7. This gives the number of days to add to January 1st, to get to the first Friday of the year. Finally, to this Friday date, add multiples of 7 from the numbers table.
Here's the solution, using MySQL syntax for illustrative purposes:
select date_add('2007-01-01' , interval mod(13-dayofweek('2007-01-01'),7) + n * 7 day ) as friday from ( select 10*t.i + u.i as n from integers t cross join integers u ) as numbers where n between 0 and 51 order by friday
Here DAYOFWEEK is the MySQL function which yields Sunday=1, Monday=2, and so on, up to Saturday=7. The inline NUMBERS table has one column, N, and we apply the WHERE condition to get a whole year's worth of Fridays.
Dig Deeper on Oracle and SQL
Related Q&A from Rudy Limeback
Read SQL expert Rudy Limeback's advice for counting combinations in a table with SQL's GROUP BY clause Continue Reading
Read about the Mimer Validator, a tool used to verify your SQL code, in this tip from SQL expert Rudy Limeback. Continue Reading
Read an example of an SQL case expression from our SQL expert Rudy Limeback. Continue Reading