Oracle按时间段取数据
我要从库里边每隔一定的时间取1个小时前的数据,也就是说比如现在是17点多,我要取16点整到17点整的数据,18点多的时候取17点整到18点整的数据,假设这个字段叫time...
我要从库里边每隔一定的时间取1个小时前的数据,也就是说比如现在是17点多,我要取16点整到17点整的数据,18点多的时候取17点整到18点整的数据,假设这个字段叫time,表名为table,数据库为Oracle的话应该怎么写,还有到了0点了应该怎么兼容,如果Sybase的也写上更好啊
展开
2个回答
展开全部
给你简单写个,不过到时候你得定义一个job自动调度(每小时执行),这里我就按你说的写个存储过程
先建立一个存储每个小时数据的表,就叫test吧,之前的你取数据的表叫test1
PROCEDURE SP_AUTO_HOUR
IS
v_time varchar2(10);
v_time1 varchar2(10);
begin
select to_char(sysdate-1/24,'yyyymmddhh24') into v_time from dual;
select to_char(sysdate,'yyyymmddhh24') into v_time1 from dual;
insert into test select * from test1 where to_char(time,'yyyymmddhh24') between v_time and v_time1;
commit;
end;
你这个完全不用考虑0点的问题,已经计算在内了,到时你可以试试,也可以手动执行一下
先建立一个存储每个小时数据的表,就叫test吧,之前的你取数据的表叫test1
PROCEDURE SP_AUTO_HOUR
IS
v_time varchar2(10);
v_time1 varchar2(10);
begin
select to_char(sysdate-1/24,'yyyymmddhh24') into v_time from dual;
select to_char(sysdate,'yyyymmddhh24') into v_time1 from dual;
insert into test select * from test1 where to_char(time,'yyyymmddhh24') between v_time and v_time1;
commit;
end;
你这个完全不用考虑0点的问题,已经计算在内了,到时你可以试试,也可以手动执行一下
追问
这是我根据你写的改的sql语句,你看看哪里不好帮我改改
select * from table where time between to_date(to_char(sysdate-1/24,'yyyymmddhh24'),'yyyymmddhh24') and to_date(to_char(sysdate,'yyyymmddhh24'),'yyyymmddhh24');
追答
语法应该没错误,不用改了,你执行一下检查下数据就行
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询