#MySQLで日付型から曜日を取得する
MySQL上で日付型から曜日を取得できる関数は2つあります。
##DAYOFWEEK(date)
戻り値
code | 曜日 |
---|---|
1 | 日曜日 |
2 | 月曜日 |
3 | 火曜日 |
4 | 水曜日 |
5 | 木曜日 |
6 | 金曜日 |
7 | 土曜日 |
##WEEKDAY(date)
戻り値
code | 曜日 |
---|---|
0 | 月曜日 |
1 | 火曜日 |
2 | 水曜日 |
3 | 木曜日 |
4 | 金曜日 |
5 | 土曜日 |
6 | 日曜日 |
#JavascriptのDate.getDay()の戻り値
戻り値
code | 曜日 |
---|---|
0 | 日曜日 |
1 | 月曜日 |
2 | 火曜日 |
3 | 水曜日 |
4 | 木曜日 |
5 | 金曜日 |
6 | 土曜日 |
#PHPのdate('w')の戻り値
戻り値
code | 曜日 |
---|---|
0 | 日曜日 |
1 | 月曜日 |
2 | 火曜日 |
3 | 水曜日 |
4 | 木曜日 |
5 | 金曜日 |
6 | 土曜日 |
#曜日コードを揃えたい場合(PHP,Javascriptベース)
言語等 | 関数 |
---|---|
php | date('w') |
Javascript | Date.getDay() |
MySQL | DAYOFWEEK(date) - 1 |
※ただし下記のビット演算を使用したい場合は全てに+1しておいた方が好都合。
#曜日コードを揃えたい場合(複数選択のビット演算想定ベース)
言語等 | 関数 |
---|---|
php | date('w') + 1 |
Javascript | Date.getDay() + 1 |
MySQL | DAYOFWEEK(date) |
#やりたいこと = 曜日を複数選択して保持したい & 該当曜日かどうか判定したい
やりたいことはよくある定休日とかの曜日判定ですが、上記は全部ばらばら。。
- SQLにあまり頑張らせたくないのでJavascript側で加工は頑張る想定でコードはMySQLベースで考える。
- 複数選択された曜日はholidaysとしてMath.pow(2, [1:日曜日~7:土曜日] - 1)の和を保持する。
- MySQLのWEEKDAY(date)はコードの最小値が月曜日なので面倒。対応しない。
で、こうやってみる
dateが複数選択された曜日か判定.js
!!(holidays & Math.pow(2,date.getDay()))
MySQL上だとこんな感じ
MySQLでsysdate()が複数選択された曜日か判定.sql
set @holiday := 7; // 1:日曜日、2:月曜日、4:火曜日が複数選択された想定。
select @holiday & (dayofweek(sysdate()) - 1); // 0なら複数選択外。0以外なら複数選択内。
色々書いてみたけど結局ビット演算の使用例でしかないのかなこれ。。