使用MySQL在一个月内找到N:星期一

时间:2012-09-24 19:33:05

标签: mysql

如何根据MySQL中的@ref_date@n@week_day找到一个月的 n -th 工作日

SET @ref_date = '2012-09-25';
SET @n = 3; #The third week
SET @week_day = 0; #Monday

结果应该是:2012-09-17

任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:2)

@weekday使用标准'0 == Monday',但MySql使用基于1的标准'1 == Sunday'。假设我们不得不说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);

答案 1 :(得分:1)

在这里找到SO中的一个解决方案

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

阅读Week of the Month in Mysql