【发布时间】:2021-09-15 15:25:03
【问题描述】:
我正在学习 for 循环并尝试使用 PostgreSQL 创建一个 PL/pgSQL 块,该块将生成一个付款时间表。此循环运行 12 个月,直到余额为 0,并且每个月都会显示到期日期。
这是我目前所拥有的,但月份部分没有添加到 for 循环中,它只添加了一次。
DO $$
DECLARE
start_date DATE := '01-Jan-2021';
payment_due_date DATE;
due_date VARCHAR(25);
mon_pay_amt NUMERIC := 10;
total_mon_amt NUMERIC := 12;
bal_num NUMERIC :=0;
BEGIN
bal_num := mon_pay_amt * total_mon_amt;
due_date := start_date;
RAISE NOTICE 'Total Amount due in 12 Months: %', to_char(bal_num, '$999.99');
FOR i IN 1..total_mon_amt LOOP
bal_num := bal_num - mon_pay_amt;
payment_due_date := start_date + INTERVAL '1 MONTH';
RAISE NOTICE 'Payment Number: %', i ||' '|| 'Due Date: ' ||payment_due_date|| ' Payment Amount : ' || to_char(mon_pay_amt, '$99.99') ||' '||
'Balance ' || to_char(bal_num, '$999.99');
END LOOP;
END $$;
【问题讨论】:
-
那是因为你不断将
'1 month'添加到start_date,它被固定为'01-Jan-2021'。您需要在循环中使用i计数器。比如:start_date + INTERVAL i::varchar || ' ' || MONTH'. -
那么你有答案了吗?
标签: sql postgresql for-loop plpgsql