2015-02-17 53 views
1

我已经搜索,但无法找到如何列出两个日期之间的星期的解决方案。存储过程列出两个日期之间的所有星期

我找到解决方案,列出了所有日子的一个月两个日期之间:

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年2月1日 - 周末:2015年2月7日

周开学:2015年2月8日 - 周末:2015年2月14日

周开学:2015年-02-15 - 周末:2015年2月21日

周开学:2015年2月22日 - 周末:2015年2月28日

回答

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

+0

这工作,谢谢你先生! – shepherd 2015-02-17 21:34:51

+1

谢谢你,我用这个代码与yearweek()函数有一个我可以查询的周列表。当对另一个具有LEFT JOIN的表使用此功能时,您会在空白周获得NULL值。 (而不是跳过那一周)。 – Paul 2015-08-03 15:13:07

相关问题