特定の週に続く週の数を計算する必要があります。これは、年内のほとんどの週では些細なことですが、年末/年始ではそうではありません。たとえば、2013 年の第 52 週の次の週を知る必要があるとします。
私は defaul_week_format 3 を使用したいと思います。つまり、a) 週は (日曜日ではなく) 月曜日から始まります。b) 1 年内の番号付けは (0 ではなく) 1 から始まります。c) 週番号 1 は、それ以上の週数を持つ最初の週です。今年はあと3日。
たとえば、2014 年 36 週後の週を計算するための私のアプローチは次のとおりです。
SELECT WEEK(DATE_ADD(STR_TO_DATE('W36 2014 Tuesday', 'W%V %X %W'), INTERVAL 1 WEEK))
この例では、第 36 週の火曜日の日付を計算し、1 週間追加して、この日の週を計算します。これは機能しますが、1 週間追加しなくても、次のような奇妙な動作が発生します。
default_week_format 0 で機能します。
SET @@local.default_week_format=0;
SELECT STR_TO_DATE('W36 2014 Tuesday', 'W%V %X %W');
-> Tuesday of week 36 is 2014-09-09
SELECT week('2014-09-09');
-> 2014-09-09 is in week 36
これまでのところ、とても良いです: 36 週目の火曜日は 36 週目です。
しかし、この簡単な実験は default_week_format 3 ではうまくいきません:
SET @@local.default_week_format=3;
SELECT STR_TO_DATE('W36 2014 Tuesday', 'W%V %X %W');
-> Tuesday of week 36 is 2014-09-09
-> This is wrong, because numbering should start with 1 (instead of 0 now)!
-> Tuesday of week 36 should be 2014-09-02
SELECT week('2014-09-09');
-> 2014-09-09 is in week 37
したがって、MySQL は、第 36 週の火曜日が第 37 週にあることを教えてくれます。
これについての私の唯一の説明:
- week() は default_week_format を考慮します
- str_to_date() は default_week_format を無視します
MySQL 関数 str_to_date に default_week_format を使用させるにはどうすればよいですか?
または: 他にどのように次の週の数を計算できますか? PHP でも実行できますが、MySQL データベースから週数を取得します。
助けてくれてありがとう!