1

、、および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

任意の提案をいただければ幸いです。

4

2 に答える 2

3

標準の '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);
于 2012-09-24T20:18:40.453 に答える
1

ここでSOのソリューションの1つを見つけてください

SELECT  WEEK(dateField, 5) -
        WEEK(DATE_SUB(dateField, INTERVAL DAYOFMONTH(dateField) - 1 DAY), 5) + 1

読んだWeek of the Month in Mysql

于 2012-09-24T19:37:05.527 に答える