Szukałem, ale nie znalazłem rozwiązania, w jaki sposób wymienić tygodnie między dwiema datami.
Znalazłem rozwiązania, które wymieniają wszystkie dni w miesiącu między dwiema datami:
select * from
(select adddate("1970-01-01",t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) selected_date from
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v
where selected_date between "2012-02-10" and "2012-02-15"
Ale nic nie wymienia tygodni jako formatu tygodnia 7-dniowego, zgodnie z poniższym:
Jak byś to zrobił?
Początek tygodnia: 01.02.2015 - Koniec tygodnia: 07.02.2015
Początek tygodnia: 08.02.2015 - Koniec tygodnia: 14.02.2015
Początek tygodnia: 15.02.2015 - Koniec tygodnia: 21.02.2015
Początek tygodnia: 22.02.2015 - Koniec tygodnia: 28.02.2015
Odpowiedzi:
1 dla odpowiedzi № 1Możesz wybrać wszystkie dni i filtrować pierwszego dnia tygodnia (date_format(selected_date, "%w") = 0
):
select selected_date, date_add(selected_date, INTERVAL 6 DAY)
from
(select adddate("1970-01-01",t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) selected_date
from
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v
where selected_date between "2015-02-01" and "2015-02-28"
AND date_format(selected_date, "%w") = 0
SQLFIDDLE: http://sqlfiddle.com/#!2/7bc0e/52
Możesz użyć
AND DAYOFWEEK(selected_date) = 1
zamiast
date_format(selected_date, "%w") = 0
Myślę, że jest to trochę bardziej czytelne: http://sqlfiddle.com/#!2/7bc0e/54