MySQL WEEKDAY() function explained

The MySQL WEEKDAY() function returns the index number of the day from a DATE or DATETIME string or integer.

The index number starts from 0 for Monday and ends with 6 for Sunday.

The WEEKDAY() function syntax is as follows:

WEEKDAY(DATE/DATETIME)

The parameter DATE format must be in the form of YYYY-MM-DD for string type or YYYYMMDD for integer type.

If you’re passing a DATETIME format, then it must be YYYY-MM-DD hh:mm:ss for string type or YYYYMMDDhhmmss for integer type.

Here’s a SELECT statement example that makes use of the WEEKDAY() function. Note that the first function call uses the string format and the second one uses integer format:

SELECT WEEKDAY('2021-09-25'), WEEKDAY(20210925);

Since 25th September 2021 (today) is Saturday, the WEEKDAY function returns 5:

+-----------------------+-------------------+
| WEEKDAY('2021-09-25') | WEEKDAY(20210925) |
+-----------------------+-------------------+
|                     5 |                 5 |
+-----------------------+-------------------+
1 row in set (0.00 sec)

While you can pass a DATETIME format, the time section usually has no effect because the WEEKDAY() function only counts the date section.

But this means you don’t have to format a DATETIME column into a DATE column before passing it to the WEEKDAY() function.

For example, suppose you have a members table with the following data:

+------------+---------------------+
| join_date  | last_update         |
+------------+---------------------+
| 2021-09-22 | 2021-09-22 09:20:10 |
| 2021-09-23 | 2021-09-23 09:20:10 |
| 2021-09-24 | 2021-09-24 09:20:10 |
| 2021-09-25 | 2021-09-25 09:20:10 |
+------------+---------------------+
4 rows in set (0.00 sec)

You can pass both columns to WEEKDAY() function call without having any error:

SELECT WEEKDAY(join_date), WEEKDAY(last_update) FROM members;

The SQL query above will produce the following result set:

+--------------------+----------------------+
| WEEKDAY(join_date) | WEEKDAY(last_update) |
+--------------------+----------------------+
|                  2 |                    2 |
|                  3 |                    3 |
|                  4 |                    4 |
|                  5 |                    5 |
+--------------------+----------------------+
4 rows in set (0.00 sec)

The index number 2 equals Wednesday, 3 equals Thursday, and so on.

When you pass an invalid date format, then the function will return NULL.

The example below shows a WEEKDAY() function call with MM-DD-YYYY format:

mysql> SELECT WEEKDAY('09-25-2021');
+-----------------------+
| WEEKDAY('09-25-2021') |
+-----------------------+
|                  NULL |
+-----------------------+
1 row in set, 1 warning (0.00 sec)

And that’s how MySQL WEEKDAY() function works 😉

More MySQL tutorials

See all