Sorting by Day of Week
Problem
You want to sort rows in day-of-week order.
Solution
Use
DAYOFWEEK()
to
convert a date column to its numeric day-of-week value.
Discussion
Day-of-week sorting is similar to calendar-day sorting, except that you use different functions to get at the relevant ordering values.
You can get the day of the week using
DAYNAME()
, but
that produces strings that sort lexically rather than in day-of-week
order (Sunday, Monday, Tuesday, and so forth). Here the technique of
displaying one value but sorting by another is useful (see Displaying One Set of Values While Sorting by Another). Display day names using
DAYNAME()
, but sort in
day-of-week order using DAYOFWEEK()
, which returns numeric
values from 1 to 7 for Sunday through Saturday:
mysql>SELECT DAYNAME(date) AS day, date, description
->FROM event
->ORDER BY DAYOFWEEK(date);
+----------+------------+-------------------------------------+ | day | date | description | +----------+------------+-------------------------------------+ | Sunday | 1809-02-12 | Abraham Lincoln's birthday | | Sunday | 1776-07-14 | Bastille Day | | Monday | 1215-06-15 | Signing of the Magna Carta | | Tuesday | 1944-06-06 | D-Day at Normandy Beaches | | Thursday | 1989-11-09 | Opening of the Berlin Wall | | Friday | 1732-02-22 | George Washington's birthday | | Friday | 1958-01-31 | Explorer 1 launch date | | Friday | 1957-10-04 | Sputnik launch date | | Saturday | 1919-06-28 | Signing of the Treaty of Versailles | | Saturday | 1789-07-04 ...
Get MySQL Cookbook, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.