gpt4 book ai didi

sql - 如何返回从下个月开始的付款到期日

转载 作者:行者123 更新时间:2023-12-02 10:31:34 25 4
gpt4 key购买 nike

我构建了这个函数,它必须根据该质押 ID 返回质押的首次付款到期日。我的表中的每个质押都有一个日期,付款发生在每个月的第一天,从质押日期的下个月开始。我需要从匿名 block 中调用它...希望它足够清楚...

这是函数代码

create or replace function DD_PAYDATE1_SF (

pledge_id dd_payment.idpledge%type)

return date is

payment_date dd_payment.paydate%type;

begin

select paydate into payment_date from dd_payment
where dd_payment.idpledge = pledge_id;



return payment_date;

end DD_PAYDATE1_SF;

我尝试了 trunc 函数,但它似乎返回了我所有后续付款 - 因为我在调用函数“精确获取返回的行数多于请求的行数”时收到此错误 -虽然我只需要其中的第一个我该如何解决这个问题

最佳答案

您需要加入具有质押日期的表(我猜 pledge ),过滤以仅获取此后的付款日期,并使用 MIN获取第一个日期的聚合函数:

create or replace function dd_paydate1_sf (
pledge_id dd_payment.idpledge%type)
return date is
payment_date dd_payment.paydate%type;
begin
select min(d.paydate)
into payment_date
from pledge p
join dd_payment d on d.idpledge = p.pledge_id
and d.paydate > p.pledge_date
where p.pledge_id = dd_paydate1_sf.pledge_id;

return payment_date;
end dd_paydate1_sf;
/

SQL Fiddle .

虽然加入和过滤是否必要是值得怀疑的,因为它们意味着你可以在 promise 之前付款,这实际上没有意义;所以你只需添加 MIN() 就可以得到相同的效果到您的原始查询。

这不会显示新 promise 的第一个日期(本月收到的 promise )并将返回 null。如果您也想要这些,并且您关于接下来几个月的第一个月的规则始终正确,您可以忽略付款表并计算出它应该是什么:

create or replace function dd_paydate1_sf (
pledge_id dd_payment.idpledge%type)
return date is
payment_date dd_payment.paydate%type;
begin
select trunc(p.pledge_date, 'MM') + interval '1' month
into payment_date
from pledge p
where p.pledge_id = dd_paydate1_sf.pledge_id;

return payment_date;
end dd_paydate1_sf;
/

TRUNC(<date>, 'MM')给出该日期所在月份的第一天,然后您可以添加一个以获得下个月的第一天。

SQL Fiddle .

这取决于您是否想要第一次预期付款日期,或者第一次付款实际进行的日期,假设 dd_payment正在记录已发生的实际付款。

<小时/>

要获取并显示匿名 block 中的一个值:

declare
paydate date;
begin
paydate := dd_paydate1_sf(104);
dbms_output.put_line(to_char(paydate, 'DD/MM/YYYY'));
end;
/

关于sql - 如何返回从下个月开始的付款到期日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16860087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com