SQL: Как я могу получить следующий понедельник, через 2 недели после регистрации клиента у нас? - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть список клиентов, которые все зарегистрировались в разные даты, мне было интересно, как мне найти следующий понедельник через 2 недели после регистрации?

Например, если человек зарегистрировался в воскресенье, то в следующий понедельниктехнически выпадает на их вторую неделю и 1 день после регистрации.в то время как кто-то, кто регистрируется в понедельник, следующий понедельник технически выпадает на 3-ю неделю после регистрации.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

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);
0 голосов
/ 14 декабря 2018

Понедельник - 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 ;
...