减去Oracle中返回0的日期

时间:2015-04-23 19:00:10

标签: sql oracle plsql oracle11g

我创建了以下功能:

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;

由于数据类型似乎在函数中是正确的,我无法理解为什么减法不起作用。有提示吗?

1 个答案:

答案 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