首页 新闻 会员 周边

ORACLE小时段 Connect By的查询,感觉还是有点难度的。

0
悬赏园豆:30 [待解决问题]

要获取以半个小时为单位的整点列表数据,要达到的结果是这样子的:

比如当前时间是19:50分,则要列出以半小时为整点单位的数据列表,

19:00-19:30

18:30-19:00

18:00-18:30

......

再比如 现在时间是 20:13分,则要列出的数据结果集是:

19:30-20:00

19:00-19:30

18:30-19:00

18:00-18:30

.......

不知道我描述清楚没。就是当前时间往前推到半小时或者整点单位,然后以半小时半小时作为间隔。 悬赏分数不多,希望oracle熟悉的兄弟多多参与一下, 思考下这个问题!

这是ORACLE的小时段查询语句,

可可ル的主页 可可ル | 初学一级 | 园豆:126
提问于:2012-02-18 01:38
< >
分享
所有回答(2)
0

应该不需要使用递归吧!我oracle的函数不是很熟悉。sqlserver可以参考一下:

create table tb (t date)

select t1 from (
select DATEDIFF(mi,t, convert(date,convert(varchar(10),getdate(),21))) / 30 as t1 from tb
)

--其中DATEDIFF 就是时间差
小小刀 | 园豆:1991 (小虾三级) | 2012-02-18 10:07

呵呵,不是你这样的啊,我要的是结果集,就跟我提出的问题一样 oracle查询。

支持(0) 反对(0) 可可ル | 园豆:126 (初学一级) | 2012-02-18 20:25

@可可ル: 这样的查出来的数据就是以半个小时为单位的,可以以这个数据group by 就可以出来你要的数据了!

支持(0) 反对(0) 小小刀 | 园豆:1991 (小虾三级) | 2012-02-18 20:30
0

/*建立保存时间表*/
create table t(t varchar2(20));
/*生成时间段过程*/
create or replace procedure pro_sj
as
v_sj varchar2(20);
v_time date;
begin
delete t;
v_time:=sysdate;
while (v_time-1/48>=trunc(sysdate,'dd')) loop
begin
select (case
         when to_char(v_time - 1 / 48, 'mi') >= 30 then
          to_char(v_time - 1 / 48, 'hh24') || ':30'
         else
          to_char(v_time - 1 / 48, 'hh24') || ':00'
       end) || '-' || (case
         when to_char(v_time, 'mi') >= 30 then
          to_char(v_time, 'hh24') || ':30'
         else
          to_char(v_time, 'hh24') || ':00'
       end)
  into v_sj
  from dual;
insert into t values(v_sj);
commit;
v_time:=v_time-1/48;
end;
end loop;
end;
/

丘山走云 | 园豆:205 (菜鸟二级) | 2012-02-28 14:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册