/ / Procedura składowana, aby wyświetlić listę wszystkich tygodni między dwiema datami - mysql, date

Przechowywana procedura do wyświetlania wszystkich tygodni między dwiema datami - mysql, date

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 № 1

Moż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