MySQLで曜日を調べる

MySQLの曜日を調べる関数は2つあって、それぞれ戻り値が違うので紛らわしい。


DAYOFWEEK(date)

date ( 1 = Sunday 、2 = Monday 、… 、7 = Saturday ) に対する曜日のインデックスを戻します。
これらのインデックス値は、ODBC 標準に対応しています。

mysql> SELECT DAYOFWEEK('2011-07-13');
+-------------------------+
| DAYOFWEEK('2011-07-13') |
+-------------------------+
|                       4 |
+-------------------------+
mysql> SELECT DAYOFWEEK(now());
+------------------+
| DAYOFWEEK(now()) |
+------------------+
|                4 |
+------------------+
1 row in set (0.00 sec)


こちらは日曜の1始まり。

戻り値 曜日
1 日曜日
2 月曜日
3 火曜日
4 水曜日
5 木曜日
6 金曜日
7 土曜日


WEEKDAY(date)

date ( 0 = Monday 、1 = Tuesday 、… 、… 6 = Sunday ) の曜日のインデックスを戻します。

mysql> SELECT WEEKDAY('2011-07-13');
+-----------------------+
| WEEKDAY('2011-07-13') |
+-----------------------+
|                     2 |
+-----------------------+
mysql> SELECT WEEKDAY(NOW());
+----------------+
| WEEKDAY(NOW()) |
+----------------+
|              2 |
+----------------+


こちらは月曜の0始まり。

戻り値 曜日
0 月曜日
1 火曜日
2 水曜日
3 木曜日
4 金曜日
5 土曜日
6 日曜日


曜日名を取得する。

SELECT
(
  CASE dayofweek(now())
    WHEN 1 THEN '日曜日'
    WHEN 2 THEN '月曜日'
    WHEN 3 THEN '火曜日'
    WHEN 4 THEN '水曜日'
    WHEN 5 THEN '木曜日'
    WHEN 6 THEN '金曜日'
    WHEN 7 THEN '土曜日'
  END
)
AS week
;
+--------+
| week   |
+--------+
| 水曜日 |
+--------+

参考:
MySQL :: MySQL 5.1 リファレンスマニュアル :: 11.5 日付時刻関数
http://dev.mysql.com/doc/refman/5.1/ja/date-and-time-functions.html