要获取以半个小时为单位的整点列表数据,要达到的结果是这样子的:
比如当前时间是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的小时段查询语句,
应该不需要使用递归吧!我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 就是时间差
呵呵,不是你这样的啊,我要的是结果集,就跟我提出的问题一样 oracle查询。
@可可ル: 这样的查出来的数据就是以半个小时为单位的,可以以这个数据group by 就可以出来你要的数据了!
/*建立保存时间表*/
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;
/