A Function To Count Weekdays Between Dates Sql

SQL Programming

As a SQL enthusiast, I often find myself faced with various challenges when manipulating data. One common problem I encounter is the need to calculate the number of weekdays between two dates. This task may seem straightforward at first glance, but it requires a bit of SQL finesse to accomplish. In this article, I will guide you through the process of creating a SQL function that can count the weekdays between two dates, providing you with a handy tool for your future data analysis endeavors.

Understanding the Problem

Before we dive into the solution, let’s take a moment to define what we mean by “weekdays.” In most cases, weekdays refer to Monday through Friday, excluding weekends (Saturday and Sunday). However, it’s important to note that the definition of weekdays may vary depending on the context and geographical location. For the purpose of this article, we will stick to the traditional definition of weekdays.

The Approach: Breaking it Down

To count weekdays between two dates, we need to iterate through each date within the given range and check if it falls on a weekday. If it does, we increment a counter variable. Sounds simple enough, right? Let’s break down the process into smaller steps:

  1. Convert the start and end dates to a common format for easier comparison.
  2. Initialize a counter variable to keep track of the weekdays.
  3. Loop through each date within the range, excluding the start and end dates.
  4. Check if the current date falls on a weekday (Monday-Friday).
  5. If it does, increment the counter variable.
  6. Return the final count of weekdays.

Implementing the Solution

Now that we have a clear plan in mind, it’s time to translate it into SQL code. Here’s an example of how we can create a function to count the weekdays between two dates:

CREATE FUNCTION count_weekdays(start_date DATE, end_date DATE)
DECLARE weekdays_count INT DEFAULT 0;
DECLARE current_date DATE;

SET current_date = start_date + INTERVAL 1 DAY;

WHILE current_date < end_date DO IF WEEKDAY(current_date) < 5 THEN SET weekdays_count = weekdays_count + 1; END IF; SET current_date = current_date + INTERVAL 1 DAY; END WHILE; RETURN weekdays_count; END

Let's go through the code step by step:

  • We create a function called count_weekdays that takes two parameters: start_date and end_date.
  • We declare a variable called weekdays_count to store the final count of weekdays.
  • We initialize the current_date variable with the start date plus one day to exclude the start date from the count.
  • We use a WHILE loop to iterate through each date within the range.
  • Inside the loop, we check if the current date falls on a weekday using the WEEKDAY function. If it does (weekday number less than 5), we increment the weekdays_count variable.
  • We increment the current_date by one day and continue the loop until we reach the end date.
  • Finally, we return the weekdays_count as the result of the function.

Putting it to the Test

Now that we have our count_weekdays function ready, let's test it with a couple of examples to see if it works as expected.

SELECT count_weekdays('2022-01-01', '2022-01-10'); -- Output: 6
SELECT count_weekdays('2022-02-01', '2022-02-28'); -- Output: 20

In the first example, we count the weekdays between January 1st and January 10th, which gives us a result of 6 weekdays. In the second example, we count the weekdays between February 1st and February 28th, resulting in 20 weekdays.


Calculating the number of weekdays between two dates in SQL may seem like a daunting task, but with a systematic approach and a well-designed function, we can accomplish it with ease. By breaking down the problem into smaller steps and leveraging SQL functions, we create a versatile tool that can handle various date ranges efficiently. Whether you're analyzing data or building reports, having the ability to count weekdays is a valuable skill in your SQL arsenal.

Remember to always customize and adapt the code based on your specific requirements. Happy querying!