求sql:从4月1号到9月1号每隔3周的星期一星期二的日期
解决方案 »
- 如何使用ERStudio创建oracle序列
- 关于:ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
- 这个批量更新语句正确吗?主要是逻辑,更新是成功的。
- ACCESS 数据库导入 Oracle
- 遇到一个怪问题,请遇到的诊断一下!
- oracle 联结的问题????
- 我想问一下各位大侠关于数据库发布的问题.谢谢1
- 如何得到一个Oracle数据表的字段信息?急,急
- Oracle Developer
- 请问,9M大的dmp文件导入数据库后,占了1G的系统表空间?
- 请教NBU备份软件中start window窗口的选项问题。
- scott用户下的表,要求实现如下查询需求,小弟自己写了个。我想问下有无更优的书写方式
--过滤小于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
decode(to_char(c1,'d'),'1','周日','2','周一','3','周二','4','周三','5','周四','6','周五','7','周六')