Jak znaleźć n-ty dzień powszedni miesiąca na podstawie @ref_date, @n i @week_day w MySQL:

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

Wynik powinien być: 2012-09-17.

Wszelkie sugestie są mile widziane.

1
Tamás Pap 24 wrzesień 2012, 23:33

2 odpowiedzi

Najlepsza odpowiedź

Masz @weekday używając standardu „0 == poniedziałek”, ale MySql używa standardu opartego na 1 z „1 == niedziela”. Zakładając, że jesteśmy zmuszeni powiedzieć, że 0 musi równać się poniedziałek, możesz to zrobić:

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

Czyli jako pojedyncze zapytanie, które byłoby:

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);
3
PinnyM 25 wrzesień 2012, 01:16

Znajdź w jednym z rozwiązań w SO tutaj

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

Przeczytaj Week of the Month in Mysql

1
diEcho 24 wrzesień 2012, 23:44