2017-06-01 85 views
-1

在这个网站上,我看到一个功能,那我想与PostgreSQL一起使用:功能对于PostgreSQL

https://raresql.com/2013/05/16/sql-server-excel-financial-functions-pmt/

下面是该查询:

CREATE FUNCTION UDF_PMT 
(@InterestRate NUMERIC(18,8), --Rate is the interest rate per period. 
@Nper   INT,   --Nper is the total number of payment 
           --periods in an annuity. 
@Pv   NUMERIC(18,4), --Pv is the present value, or the 
           --lump-sum amount that a series of 
           --future payments is worth right now. 
           --If pv is omitted, it is assumed to be 
           --0 (zero). PV must be entered as a 
           --negative number. 
@Fv   NUMERIC(18,4), --Fv is the future value, or the 
           --lump-sum amount that a series of 
           --future payments is worth right now. 
           --If pv is omitted, it is assumed to 
           --be 0 (zero). PV must be entered as a 
           --negative number. 
@Type   BIT   --Type is the number 0 or 1 and 
           --indicates when payments are due. 
           --If type is omitted, it is assumed 
           --to be 0 which represents at the end 
           --of the period. 
           --If payments are due at the beginning 
           --of the period, type should be 1. 
) 
RETURNS NUMERIC(18,2) --float 
AS 
    BEGIN 
    DECLARE @Value NUMERIC(18,2) 
    SELECT @Value = Case 
    WHEN @Type=0 
    THEN Convert(float,@InterestRate/100) 
    /(Power(Convert(float,(1 + @InterestRate/100)),@Nper)-1) 
    * -(@Pv*Power(Convert(float,(1 + @InterestRate/100)),@Nper) 
    [email protected]) 

    WHEN @Type=1 
    THEN Convert(float,@InterestRate/100)/
    (Power(Convert(float,(1 + @InterestRate/100)),@Nper)-1) 
    * -(@Pv*Power(Convert(float,(1 + @InterestRate/100)),@Nper) 
    [email protected]) 
    /(1 + Convert(float,(@InterestRate/100))) 

    END 
    RETURN @Value 
    END 

我改名为变量,而@并改变了身体一点点,但不知何故,我不能让它正常运行。

是否有可能重写这个查询postgresql?你有什么想法如何做到这一点?谢谢

+0

这里重要的是你想要的结果和样本数据。你能展示一些吗? –

+0

@reds嗨,感谢您的帮助!例如'SELECT UDF_PMT(0.625,24,5000,0,0)'将返回'225' –

+0

某些输出也可以在帖子中看到:https://raresql.com/2013/05/16/sql- server-excel-financial-functions-pmt/@reds谢谢 –

回答

1
CREATE OR REPLACE FUNCTION UDF_PMT (
InterestRate NUMERIC(18,8), 
Nper   INTEGER, 
Pv   NUMERIC(18,4), 
Fv   NUMERIC(18,4), 
Typ   INTEGER 
) 
RETURNS NUMERIC(18,2) 
AS $$ 
    SELECT round(
     CASE 
     WHEN Typ = 0 THEN 
      (InterestRate/100)/
      (Power(1 + InterestRate/100, Nper) - 1) * 
      (Pv * Power(1 + InterestRate/100, Nper) + Fv) 
     WHEN Typ = 1 THEN 
      (InterestRate/100)/
      (Power(1 + InterestRate/100, Nper) - 1) * 
      (Pv * Power(1 + InterestRate/100, Nper) + Fv)/
      (1 + InterestRate/100) 
     END, 2) 
$$ LANGUAGE SQL;