日期:2014-05-17 浏览次数:20908 次
--过滤小于4月1号的日期
select c1,to_char(c1,'ww') "周数",to_char(c1,'d') "星期"
from
(
--得出每个周二和往前推2天的日期
select distinct c1-level+1 c1
from
(
--根据最小的日期一次往前推3周
select c1 + 21*(level-1) c1
from
(
--计算为周二的最小日期
select min(c1) c1
from
(
--构造4月1号到9月1号的日期表
select date'2013-04-01'+level-1 c1
from dual
connect by level <= date'2013-09-01' - date'2013-04-01'+1
)
where to_char(c1,'d') = 2
)
connect by level <= (date'2013-09-01' - date'2013-04-01')/21+1
)
connect by level < 4
order by c1
)
where c1 >= date'2013-04-01'
日期 周数 星期
---------------------------------------------
1 2013/4/1 13 2
2 2013/4/20 16 7
3 2013/4/21 16 1
4 2013/4/22 16 2
5 2013/5/11 19 7
6 2013/5/12 19 1
7 2013/5/13 19 2
8 2013/6/1 22 7
9 2013/6/2 22 1
10 2013/6/3 22 2
11 2013/6/22 25 7
12 2013/6/23 25 1
13 2013/6/24 25 2
14 2013/7/13 28 7
15 2013/7/14 28 1
16 2013/7/15 28 2
17 2013/8/3 31 7
18 2013/8/4 31 1
19 2013/8/5 31 2
20 2013/8/24 34 7
21 2013/8/25 34 1
22 2013/8/26 34 2