/ / Uložená procedúra na výpis všetkých týždňov medzi dvoma dátumami - mysql, date

Uložený postup na zoznam všetkých týždňov medzi dvoma dátumami - mysql, dátum

Hľadal som, ale nemohol som nájsť riešenie, ako uviesť zoznam týždňov medzi dvoma dátumami.

Našiel som riešenia, ktoré uvádzajú všetky dni v mesiaci medzi dvoma dátumami:

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"

Nič však neuvádza týždne vo formáte 7 dní v týždni nižšie:

Ako by ste to urobili?

Začiatok týždňa: 2015-02-01 - Koniec týždňa: 2015-02-07

Začiatok týždňa: 2015-02-08 - Koniec týždňa: 2015-02-14

Začiatok týždňa: 2015-02-15 - Koniec týždňa: 2015-02-21

Začiatok týždňa: 2015-02-22 - Koniec týždňa: 2015-02-28

odpovede:

1 pre odpoveď č. 1

Môžete vybrať všetky dni a filtrovať prvý deň v týždni (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

Mohli by ste ju použiť

AND DAYOFWEEK(selected_date) = 1

namiesto

date_format(selected_date, "%w") = 0

Myslím, že je to trochu čitateľnejšie: http://sqlfiddle.com/#!2/7bc0e/54