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.
2 odpowiedzi
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);
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
Podobne pytania
Powiązane pytania
Nowe pytania
mysql
MySQL to darmowy system zarządzania relacyjnymi bazami danych (RDBMS) o otwartym kodzie źródłowym, który wykorzystuje język SQL (Structured Query Language). NIE UŻYWAJ tego znacznika dla innych baz danych, takich jak SQL Server, SQLite itp. Są to różne bazy danych, które używają własnych dialektów SQL do zarządzania danymi.