`
浴盆儿
  • 浏览: 80489 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

在Postgres自定义函数中实现财务折旧金额的计算

 
阅读更多
-- Function: db(float8, float8, float8, float8, float8) 
-- DROP FUNCTION db(float8, float8, float8, float8, float8); CREATE OR REPLACE FUNCTION db(float8, float8, float8, float8, float8) RETURNS float8 AS 
$BODY$ 
/** 
* * 使用固定余额递减法,计算一笔资产在给定期间内的折旧值。 
* * 语法 
* * DB(cost,salvage,life,period,month) 
* * Cost 为资产原值。 
* * Salvage 为资产在折旧期末的价值(也称为资产残值)。 
* * Life 为折旧期限(有时也可称作资产的生命周期)。 
* * Period 为需要计算折旧值的期间。Period 必须使用与 life 相同的单位。 
* * Month 为第一年的月份数,如省略,则假设为 12。 
* * 说明 
* * 固定余额递减法用于计算固定利率下的资产折旧值,函数 DB 使用下列计算公式来计算一个期间的折旧值: 
* * (cost - 前期折旧总值 ) * rate 
* * 式中: 
* * rate = 1 - ((salvage / cost) ^ (1 / life)),保留 3 位小数 
* * 第一个周期和最后一个周期的折旧属于特例。对于第一个周期,函数 DB 的计算公式为: 
* * cost * rate * month / 12 
* * 对于最后一个周期,函数 DB 的计算公式为: 
* * ((cost - 前期折旧总值) * rate * (12 - month)) / 12 
* * 示例 
* * 假定某工厂购买了一台新机器。价值为 $1,000,000,使用期限为 6 年。残值为  $100,000。下面的例子给出机器在使用期限内的历年折旧值,结果保留整数。 
* DB(1000000,100000,6,1,7) 等于 $186,083 
* DB(1000000,100000,6,2,7) 等于 $259,639 
* DB(1000000,100000,6,3,7) 等于 $176,814 
* DB(1000000,100000,6,4,7) 等于 $120,411 
* DB(1000000,100000,6,5,7) 等于 $82,000 
* DB(1000000,100000,6,6,7) 等于 $55,842 
* DB(1000000,100000,6,7,7) 等于 $15,845 
* */ 
DECLARE cost ALIAS FOR $1; 
salvage ALIAS FOR $2; 
life ALIAS FOR $3; 
period ALIAS FOR $4; 
monts ALIAS FOR $5; 
rec RECORD;
rate numeric; 
result float8; 
count int4; 
total float8; 
BEGIN 
IF period > life + 1 THEN 
RAISE EXCEPTION 'period value : % is wrong!!!' , period; 
END IF; 
count :=1; 
rate := 1 - ((salvage / cost) ^ (1 / life)); 
rate := round(rate,3); 
--first period 
result := cost * rate * monts / 12; 
count := count +1; total :=result; 
--middle period 
IF period >1 AND period < life + 1 THEN 
WHILE count <=period LOOP 
result := (cost - total ) * rate; 
total :=total + result; 
count := count + 1; END LOOP; 
END IF; 
--last period 
IF period = life + 1 THEN 
WHILE count <=period-1 LOOP 
result := (cost - total ) * rate; 
total :=total + result; count := count + 1; 
END LOOP; 
result :=((cost - total) * rate * (12 - monts)) / 12; 
END IF; 
RETURN round(result::numeric,0); 
END; 
$BODY$ 
LANGUAGE 'plpgsql' VOLATILE; 
ALTER FUNCTION db(float8, float8, float8, float8, float8) OWNER TO postgres;

 

2
0
分享到:
评论

相关推荐

    bat调用postgres的函数

    bat调用postgres的函数

    postgres 存储过程函数

    在PostgreSQL数据库系统中,存储过程和函数是两种非常重要的数据操作组件,它们极大地扩展了SQL语言的功能,允许用户自定义复杂的数据处理逻辑。本文将深入探讨“postgres 存储过程函数”,并基于描述中的3层循环和...

    PostgreSQL扩展函数,用于lz4压缩和解压缩。适用于Linux操作系统,支持PG10,PG11,PG12,PG13。

    包含四个自定义函数: lz4:接收bytea类型的数据,返回压缩后的bytea类型数据 un_lz4:接收bytea类型的数据,返回解压后的bytea类型数据 lz4_utf8:接收utf8编码的文本数据,返回解压后的bytea类型数据 un_lz4_utf8...

    PostgreSQL简单函数创建

    首先,我们需要理解自定义函数在PostgreSQL中的作用。自定义函数允许用户根据特定需求扩展数据库的功能,这些函数可以是SQL级别的,也可以是C语言级别的。当SQL级别的函数不能满足复杂计算或性能要求时,我们可以...

    postgres主键函数

    用于在postgres定义主键的函数,如更改id update table set id=get_uuid()

    3.(高级示例篇)leaflet+postgres+postgis+geoserver实现高性能热力图(亿级别数据量).zip

    在本案例中,亿级别的地理数据会被存储在Postgres中,并利用PostGIS的地理空间操作能力进行处理。 PostGIS允许我们对地理位置数据进行复杂的空间查询,例如距离计算、区域覆盖分析等。对于热力图的生成,我们可以...

    postgres全角转半角函数.txt

    对postgresql数据库中不规则的数据批量处理查询,有些是全角的,需要转换查询,匹配,可以使用这个方法postgres全角转半角函数.txt

    PostgreSQL IF/IFNULL 函数 内核开发

    1. 博客:PostgreSQL的学习心得和知识总结(六十七)|语法级自上而下完美实现MySQL数据库的 IF函数和IFNULL函数 的实现方案

    postgis-vt-util, postgres helper 函数用于制作矢量平铺.zip

    postgis-vt-util, postgres helper 函数用于制作矢量平铺 PostGIS矢量平铺工具 当在 Mapbox Studio 或者早期数据准备阶段的查询阶段创建向量平铺源时,一组PostgreSQL函数很有用。安装你需要的一切都在 postgis-vt-...

    postgres数据库中文手册

    在codefans.net这个文件中,可能包含了手册的电子版或者相关的资源链接,供读者下载和参考。通过深入学习这本中文手册,读者不仅可以掌握Postgres的基本操作,还能理解其高级特性,提升数据库管理和开发的技能。

    postgres中文文档.pdf

    - **ECPG**:即Embedded C Programming,允许在C程序中嵌入SQL语句。 - **信息模式**:提供了关于数据库对象的元数据信息。 #### 五、服务器端编程 - **扩展SQL**:允许用户定义自己的数据类型和函数。 - **触发器...

    postgresql汉字转拼音函数

    支持2万+汉字转拼音

    postgres数据库用户手册

    Postgres允许开发和使用自定义函数、类型和操作符。例如,`hstore`扩展提供键值对存储,`pg_stat_statements`监控查询性能,`pg_trgm`用于全文搜索和相似度比较。 九、监控与维护 通过`pg_statistic`、`pg_stat_...

    Postgres查询优化方案

    避免全表扫描,利用索引,减少子查询,以及避免在where子句中使用非索引的函数操作,都是提高查询效率的有效手段。使用EXPLAIN分析查询计划,理解数据库如何执行查询,有助于找出性能瓶颈。 3. **分区表**:对于...

    1.(高级示例篇)leaflet+postgres+postgis+geoserver实现最短路径规划分析.zip

    该资源包的执行效果查看地址:...“地图之家”专栏中的“1.(高级示例篇)leaflet+postgres+postgis+geoserver实现最短路径规划分析”。如下载有问题,可联系博主。 解压密码:leaflet

    Datax实现增量同步数据到Postgres

    标题 "Datax实现增量同步数据到Postgres" 涉及到的是使用开源数据同步工具 Datax 进行数据迁移的场景,特别是针对从某个源数据库到PostgreSQL数据库的增量同步。Datax 是阿里巴巴开发的一款高效、稳定且强大的数据...

    Oracle与postgres的区别和转化

    在 Oracle 中,使用 start with…connect by prior… 语句来实现递归查询,而在 Postgres 中,使用 with recursive… 语句来实现递归查询。 函数和存储过程的转化 在 Oracle 中,函数和存储过程使用 return 语句来...

    postgres用户下ssh无密码登录

    这将生成一对公钥和私钥,分别存储在 ~/.ssh/id_rsa和 ~/.ssh/id_rsa.pub文件中。 三、将公钥添加到authorized_keys文件 使用ssh-copy-id命令将公钥添加到authorized_keys文件: ssh-copy-id root@node2 这将将...

    spring-security-thyemleaf-jpa-postgres-customized-bootstrap:一个简单的Spring Boot演示应用程序,用于演示如何使用Spring Security,Thymeleaf,JPA,Postgres和自定义Bootstrap

    spring-security-thyemleaf-jpa-postgres自定义引导 一个简单的Spring Boot演示应用程序,演示了如何一起使用Spring Security,Thymeleaf,JPA,Postgres和Customized Bootstrap。 在此应用程序中,我们通过Spring ...

Global site tag (gtag.js) - Google Analytics