、、およびMySQLに基づいて月のn番目の平日を見つける方法:@ref_date
@n
@week_day
SET @ref_date = '2012-09-25';
SET @n = 3; #The third week
SET @week_day = 0; #Monday
結果は次のようになります2012-09-17
。
任意の提案をいただければ幸いです。
、、およびMySQLに基づいて月のn番目の平日を見つける方法:@ref_date
@n
@week_day
SET @ref_date = '2012-09-25';
SET @n = 3; #The third week
SET @week_day = 0; #Monday
結果は次のようになります2012-09-17
。
任意の提案をいただければ幸いです。
標準の '0 == Monday' を使用しています@weekday
が、MySql は '1 == Sunday' で 1 ベースの標準を使用しています。0 は月曜日に等しくなければならないという制約があると仮定すると、次のようにすることができます。
SET @first_day = DATE_SUB(@ref_date, INTERVAL DAYOFMONTH(@ref_date) - 1 DAY);
SET @first_day_of_week = (DAYOFWEEK(@first_day) - 2) % 7;
SET @solution = DATE_SUB(DATE_ADD(@first_day, INTERVAL @n WEEK), INTERVAL ( 7 - ((@week_day - @first_day_of_week + 7) % 7) ) DAY);
したがって、単一のクエリとしては次のようになります。
SELECT DATE_SUB( DATE_ADD( DATE_SUB( @ref_date, INTERVAL DAYOFMONTH(@ref_date) - 1 DAY), INTERVAL @n WEEK), INTERVAL ( 7 - ((@week_day - ((DAYOFWEEK(DATE_SUB( @ref_date, INTERVAL DAYOFMONTH(@ref_date) - 1 DAY)) - 2) % 7) + 7) % 7) ) DAY);
ここでSOのソリューションの1つを見つけてください
SELECT WEEK(dateField, 5) -
WEEK(DATE_SUB(dateField, INTERVAL DAYOFMONTH(dateField) - 1 DAY), 5) + 1