/ / 2つの日付の間の全週を一覧表示するストアドプロシージャ - mysql、date

2つの日付間のすべての週をリストするストアドプロシージャ - mysql、date

私は ""検索しましたが、2つの日付の間の週を一覧表示する方法に関する解決策を見つけることができませんでした。

私は "2つの日付の間の月のすべての日を一覧表示する解決策を見つけました:

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"

しかし、以下に示すように、週を7日の週形式として列挙するものは何もありません。

どうしますか?

週の始まり:2015-02-01 - 週の終わり:2015-02-07

週の始まり:2015-02-08 - 週の終わり:2015-02-14

週の始まり:2015-02-15 - 週の終わり:2015-02-21

週の始まり:2015-02-22 - 週の終わり:2015-02-28

回答:

回答№1は1

すべての日を選択して、週の最初の日にフィルタをかけることができます(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

あなたは使うことができます

AND DAYOFWEEK(selected_date) = 1

の代わりに

date_format(selected_date, "%w") = 0

もう少し読みやすいと思います。 http://sqlfiddle.com/#!2/7bc0e/54