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 😉