如何在 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
.
任何建议表示赞赏。
您@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);
在这里找到 SO 中的解决方案之一
SELECT WEEK(dateField, 5) -
WEEK(DATE_SUB(dateField, INTERVAL DAYOFMONTH(dateField) - 1 DAY), 5) + 1