求sql:从4月1号到9月1号每隔3周的星期一星期二的日期
求sql:从4月1号到9月1号每隔3周的星期一星期二的日期
[解决办法]
还没怎么想 写的比较麻烦 凑合看着了
--过滤小于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'
日期 周数 星期
---------------------------------------------
12013/4/1132
22013/4/20167
32013/4/21161
42013/4/22162
52013/5/11197
62013/5/12191
72013/5/13192
82013/6/1227
92013/6/2221
102013/6/3222
112013/6/22257
122013/6/23251
132013/6/24252
142013/7/13287
152013/7/14281
162013/7/15282
172013/8/3317
182013/8/4311
192013/8/5312
202013/8/24347
212013/8/25341
222013/8/26342