JavaScript
MySQL
SQL

MySQLとJavascriptの曜日コード

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 土曜日

やりたいこと = 曜日を複数選択して保持したい & 該当曜日かどうか判定したい

やりたいことはよくある定休日とかの曜日判定ですが、上記は全部ばらばら。。

  • 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以外なら複数選択内。

色々書いてみたけど結局ビット演算の使用例でしかないのかなこれ。。