我创建了以下功能:
create or replace function tempo_medio_atendimento_dia return number is
counter number;
last_date date;
date_diff number;
type_info varchar(100);
cursor c1 is select e.data_pedido from encomenda e, funcionario f where e.funcionario.codigo = f.codigo and to_char(e.data_pedido, 'YYYY-MM-DD') = '2015-04-23' order by e.data_pedido;
begin
counter := 0.0;
for c1_x in c1 loop
last_date := to_date(c1_x.data_pedido);
select dump(last_date) into type_info from dual;
DBMS_OUTPUT.PUT_LINE('TYPE INFO: ' || type_info);
if c1%rowcount > 1 then
DBMS_OUTPUT.PUT_LINE('DATE:' || c1_x.data_pedido || ' - ' || last_date || ' = ' || (to_date(c1_x.data_pedido) - to_date(last_date)) * 24 * 60 * 60);
select (to_date(c1_x.data_pedido) - to_date(last_date)) * 24 * 60 * 60 into date_diff from dual;
counter := counter + date_diff;
end if;
end loop;
return counter;
end tempo_medio_atendimento_dia;
日期打印正确,我已检查c1_x.data_pedido
类型及其12
(日期),但出于某种原因,当我尝试减去日期时,返回0。
select (to_date(c1_x.data_pedido) - to_date(last_date)) * 24 * 60 * 60 into date_diff from dual;
但是,如果我直接运行以下代码,它会返回360,因为它应该是。
select (to_date('23/04/2015 10:49:12') - to_date('23/04/2015 10:43:12')) * 24 * 60 * 60 from dual;
由于数据类型似乎在函数中是正确的,我无法理解为什么减法不起作用。有提示吗?
答案 0 :(得分:2)
你在循环中做的第一件事就是
last_date := to_date(c1_x.data_pedido);
这意味着以后执行以下操作时
to_date(c1_x.data_pedido) - to_date(last_date)
您正在减去c1_x.data_pedido - c1_x.data_pedido
。
除此之外,我建议不要将日期作为约会。我不知道data_pedido的数据类型,但last_date肯定是一个日期,所以不需要调用TO_DATE
。