-1

我有一份在不同日期注册的客户列表,我想知道如何在注册 2 周后找到下一个星期一?

例如,如果一个人在周日注册,那么从技术上讲,下周一将是他们注册后的第二周和 1 天。而在星期一注册的人,他们的下一个星期一在技术上将在注册后的第三周下降。

4

2 回答 2

1

星期一是第 2 天,因此您应该将 14+2 - your_dayoftheweek 日期添加到您的日期

 SELECT DATE_ADD(your_date, INTERVAL (16 - DAYOFWEEK(your_date)) DAY);

或按照barmar的建议

SELECT case when DAYOFWEEK(your_date) = 2 
        then DATE_ADD(your_date, INTERVAL 21  DAY)
        else   DATE_ADD(your_date, INTERVAL (16 - DAYOFWEEK(your_date)) DAY)
    END ;
于 2018-12-14T20:30:58.317 回答
0

scaisEdge 很接近,但不完全在那里。在星期日,添加的间隔将是 15 天,实际上是 3 个星期一之后。下面的代码将为您提供所需的内容:

SELECT (your_date + INTERVAL ((CASE WHEN dayofweek(your_date) = 1 THEN 7 ELSE 14 END) + (2 - dayofweek(your_date))) DAY) AS 2_mondays_from_now;

由于一周中的星期天是唯一比星期一小的一天,因此您需要这种案例逻辑。这适用于一周中在数字上出现在您想要的一周中的某一天之前的任何一天(例如,如果您想要星期三,则必须针对星期日、星期一和星期二)

编辑

我在 MySQL 中编写了一个函数,将这个问题推广到一周中的任何一天,以及输入日期之后(或之前)的任意周数:

CREATE FUNCTION dow_in_x_wks (indate DATE, dow INT, wks INT)
RETURNS DATE DETERMINISTIC
RETURN (indate + INTERVAL (
(CASE WHEN dayofweek(indate) < dow THEN (wks - 1) * 7 ELSE wks * 7 END) + (dow - dayofweek(indate))) DAY);
于 2018-12-14T20:36:41.810 回答