menu
書いてる野郎
orebike@gmail.com
NOW 関数を使う
SELECT NOW(); +---------------------+ | now() | |---------------------| | 2016-12-20 15:23:23 | +---------------------+
SELECT CURRENT_DATE; +----------------+ | CURRENT_DATE | |----------------| | 2016-12-20 | +----------------+
WEEKOFYEAR 関数を使うとその日付が年の第何週なのかを知ることができる。
SELECT WEEKOFYEAR('2017-06-29'); +--------------------------+ | WEEKOFYEAR('2017-06-29') | +--------------------------+ | 26 | +--------------------------+
生活の中で年の第何週というのはあまり意識しないので役に立たない関数ではなくデータを週別で集計したい場合に威力を発揮する。
この週の計算方法は ISO 8601 に規定されていて、
YYYY-Www-D と表記する。ww は年内の暦週の番号で、年の第1週は 01、最終週は 52 または 53 となる。
なので最初の週は第1週である。ゼロではない。
この記法では、ある年における「最初の木曜日を含む週が、その年の第1週である。」と規定されている。
そして ISO 8601 では週の始まりは月曜日と規定されている。
こうなると、年末年始であぶれる日が出てくるが、それは翌年の第1週に組み入れられる。 これは、この計算法においては全部の週が7日になっていて中途半端な日数の週は存在しないということ。
なので、この関数はそれに基づいて計算している。
ISO 8601 特殊な条件で月曜日固定なのでそれ以外でやりたい場合
これが日本人としては一番わかいりゃすい、モード2。 これは日曜起点の日曜更新で週番号が1からスタートする
select week('2017-06-29',2); +----------------------+ | week('2017-06-29',0) | +----------------------+ | 26 | +----------------------+
しかしこれは計算に不便なので、日曜更新の週番号0起算、開始木曜日のモード4というのがある。