postgresql 自定义函数

CREATE OR REPLACE FUNCTION "public"."pm25_aqi"("pm25_nd" numeric)
  RETURNS "pg_catalog"."int4" AS $BODY$
DECLARE
    RET numeric;
    IAQI_1 numeric;
    IAQI_2 numeric;
    IAQI_3 numeric;
    IAQI_4 numeric;
    IAQI_5 numeric;
    IAQI_6 numeric;
    IAQI_7 numeric;
    IAQI_8 numeric;

    BP_1 numeric;
    BP_2 numeric;
    BP_3 numeric;
    BP_4 numeric;
    BP_5 numeric;
    BP_6 numeric;
    BP_7 numeric;
    BP_8 numeric;
BEGIN
    IAQI_1=0;
    IAQI_2=50;
    IAQI_3=100;
    IAQI_4=150;
    IAQI_5=200;
    IAQI_6=300;
    IAQI_7=400;
    IAQI_8=500;

    BP_1=0;
    BP_2=35;
    BP_3=75;
    BP_4=115;
    BP_5=150;
    BP_6=250;
    BP_7=350;
    BP_8=500;
     
     IF   PM25_ND<=BP_2 
      THEN RET = ((IAQI_2-IAQI_1)/(BP_2-BP_1))*(PM25_ND-BP_1)+IAQI_1;
    
    ELSIF PM25_ND>BP_2 AND PM25_ND<=BP_3 
     THEN  RET = ((IAQI_3-IAQI_2)/(BP_3-BP_2))*(PM25_ND-BP_2)+IAQI_2;
    
    ELSIF PM25_ND>BP_3 AND PM25_ND<=BP_4 
      THEN RET = ((IAQI_4-IAQI_3)/(BP_4-BP_3))*(PM25_ND-BP_3)+IAQI_3;
    
    ELSIF PM25_ND>BP_4 AND PM25_ND<=BP_5 
      THEN RET = ((IAQI_5-IAQI_4)/(BP_5-BP_4))*(PM25_ND-BP_4)+IAQI_4;
    
    ELSIF PM25_ND>BP_5 AND PM25_ND<=BP_6 
     THEN  RET = ((IAQI_6-IAQI_5)/(BP_6-BP_5))*(PM25_ND-BP_5)+IAQI_5;
    
    ELSIF PM25_ND>BP_6 AND PM25_ND<=BP_7 
     THEN  RET = ((IAQI_7-IAQI_6)/(BP_7-BP_6))*(PM25_ND-BP_6)+IAQI_6;
    
    ELSIF PM25_ND>BP_7  
      THEN RET = ((IAQI_8-IAQI_7)/(BP_8-BP_7))*(PM25_ND-BP_7)+IAQI_7;
    END IF;
    
    IF RET>500 THEN RET=500;  END IF;

    return  ceiling(RET);
                                     
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

 

转载于:https://www.cnblogs.com/tiandi/p/10778019.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值