--注意:xp_cmdshell这个功能要放开,具体百度下就知道,可以直接语句放在窗口直接执行看效果,可行了再放作业中
declare @fileTail varchar(23), --使文件名不一样
@cmdLine varchar(1000) --命令行
--文件名日期部分:2位年数+小时+分钟,例如:1708081930
set @fileTail=convert(varchar(8),getdate(),12)+cast(datepart(hour,getdate()) as varchar)+cast(datepart(minute,getdate()) as varchar)
--这里改成你的select查询,queryout 跟上excel文件路径
set @cmdLine='bcp "select * from test.dbo.test" queryout D:\data'+@fileTail+'.xls -c -q -T'
EXEC master..xp_cmdshell @cmdLine
如果时间日期是单独一列就比较简单:1、在最后增加1列,假定时间日期从d1开始,参考使用公式:
=MOD(D1*24*60,15)
2、下拉公式到最后一行;
3、对首行进行筛选,筛选增加列结果为 0 的即可。
我试验了一下,应该可以,你可以试试。我试验的前提create table test3(t1 date,t2 number)
insert into test3 values(to_date('20090103010100','yyyymmddhh24miss'),1)
...
create or replace view test3_v as
select rownum id,t1,t2 from
(select to_char(t1,'yyyymmddhh24miss') t1,t2 from test3
set serveroutput on
declare
test3_rec1 test3_v%rowtype
test3_rec2 test3_v%rowtype
max_tempnumber
sum_tempnumber
begin
select max(id) into max_temp from test3_v
if max_temp<>0 then
select * into test3_rec1 from test3_v where id = 1
sum_temp:=test3_rec1.t2
for i in 2..max_temp
loop
select * into test3_rec2 from test3_v where id = i
if (test3_rec2.t1-test3_rec1.t1)<=to_char(0000001460) then
sum_temp:=sum_temp+test3_rec2.t2
else
dbms_output.put_line(concat('ans=',sum_temp))
test3_rec1.t2:=test3_rec2.t2
sum_temp:=test3_rec1.t2
end if
if i=max_temp then
dbms_output.put_line(concat('ans=',sum_temp))
end if
end loop
end if
end
/
SQL>/
ans=15
ans=20
ans=3
从我执行的结果看 上面的方法可行。
----
以上,希望对你能有帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)