使用 MySQL 查找一个月中的第 N 个星期一 [英] Find the N:th Monday in a month with MySQL

查看:83
本文介绍了使用 MySQL 查找一个月中的第 N 个星期一的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何根据@ref_date@nn找到一个月的第nweekday,和 @week_day 在 MySQL 中:

How to find the n-th weekday of a month based on @ref_date, @n, and @week_day in MySQL:

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 == 星期日'.假设我们不得不说 0 必须等于星期一,您可以这样做:

You have @weekday using the standard '0 == Monday', but MySql uses a 1-based standard with '1 == Sunday'. Assuming we are constrained to say that 0 must equal Monday, you can do this:

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);

这篇关于使用 MySQL 查找一个月中的第 N 个星期一的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆