3

我有一个订单表,它有 2 列包含 DATE 类型:delivery_date 和 order_date。在我的 sqldeveloper 中,我通过 Java 或手动插入的所有日期都是今年 1 月 25 日的 10.01.25 格式。当我尝试查看一个日期和另一个日期之间订单的 total_price 时,我强制采用如下格式:

create or replace function calc_Outlays (init_date IN DATE,final_date IN date)return number is

v_total_enc FORNECIMENTO.TOTAL_ENC_FORNEC%TYPE;

begin
select f.total_enc_fornec into v_total_enc from fornecimento f where f.data_entrega between init_date and final_date;
return v_total_enc;

Exception 
When no_data_found then
Insert Into errors Values (0,'No supplyment costs found for dates between '||to_char(init_date)||' and '||to_char(final_date),systimestamp);
return -1;
end;

但我得到 -1 返回。我什至尝试像这样进行查询:select f.total_enc_fornec from fornecimento f where f.data_entrega = '10.01.24';
像这样:select f.total_enc_fornec from fornecimento f where f.data_entrega = to_date('10.01.24','yy-mm-dd');
像这样:select f.total_enc_fornec from fornecimento f where f.data_entrega < to_date('10.01.24');并且没有返回任何东西!但是如果我执行 :select f.total_enc_fornec from fornecimento f where f.data_entrega <= sysdate;它会按预期打印结果...

我怎样才能做到这一点?我显然没有正确传递参数或函数,也没有执行查询本身

顺便说一句,如果我想选择某年/月/日的所有订单?比如说,使用提取功能。你能告诉我怎么做吗?我试过了,但我遇到了同样的问题,而且我的概念很简单,至少,哈哈。

4

1 回答 1

3

Oracle DATE 类型将日期+时间存储到最接近的秒数 - 因此,如果您说它与上午 6 点 10.01.24f.data_entrega = '10.01.24'的记录不匹配。f.data_entregaSYSDATE 同样返回当前时间以及今天的日期。

如果您希望您的函数仅匹配日期部分(即忽略任何时间值),您可能需要更改函数:

select f.total_enc_fornec into v_total_enc
from fornecimento f
where f.data_entrega between TRUNC(init_date) and TRUNC(final_date) + 0.99999;
于 2010-01-25T08:39:14.010 回答