-- 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;
分享到:
相关推荐
bat调用postgres的函数
在PostgreSQL数据库系统中,存储过程和函数是两种非常重要的数据操作组件,它们极大地扩展了SQL语言的功能,允许用户自定义复杂的数据处理逻辑。本文将深入探讨“postgres 存储过程函数”,并基于描述中的3层循环和...
包含四个自定义函数: lz4:接收bytea类型的数据,返回压缩后的bytea类型数据 un_lz4:接收bytea类型的数据,返回解压后的bytea类型数据 lz4_utf8:接收utf8编码的文本数据,返回解压后的bytea类型数据 un_lz4_utf8...
首先,我们需要理解自定义函数在PostgreSQL中的作用。自定义函数允许用户根据特定需求扩展数据库的功能,这些函数可以是SQL级别的,也可以是C语言级别的。当SQL级别的函数不能满足复杂计算或性能要求时,我们可以...
对postgresql数据库中不规则的数据批量处理查询,有些是全角的,需要转换查询,匹配,可以使用这个方法postgres全角转半角函数.txt
用于在postgres定义主键的函数,如更改id update table set id=get_uuid()
在本案例中,亿级别的地理数据会被存储在Postgres中,并利用PostGIS的地理空间操作能力进行处理。 PostGIS允许我们对地理位置数据进行复杂的空间查询,例如距离计算、区域覆盖分析等。对于热力图的生成,我们可以...
1. 博客:PostgreSQL的学习心得和知识总结(六十七)|语法级自上而下完美实现MySQL数据库的 IF函数和IFNULL函数 的实现方案
postgis-vt-util, postgres helper 函数用于制作矢量平铺 PostGIS矢量平铺工具 当在 Mapbox Studio 或者早期数据准备阶段的查询阶段创建向量平铺源时,一组PostgreSQL函数很有用。安装你需要的一切都在 postgis-vt-...
- **ECPG**:即Embedded C Programming,允许在C程序中嵌入SQL语句。 - **信息模式**:提供了关于数据库对象的元数据信息。 #### 五、服务器端编程 - **扩展SQL**:允许用户定义自己的数据类型和函数。 - **触发器...
在codefans.net这个文件中,可能包含了手册的电子版或者相关的资源链接,供读者下载和参考。通过深入学习这本中文手册,读者不仅可以掌握Postgres的基本操作,还能理解其高级特性,提升数据库管理和开发的技能。
支持2万+汉字转拼音
Postgres允许开发和使用自定义函数、类型和操作符。例如,`hstore`扩展提供键值对存储,`pg_stat_statements`监控查询性能,`pg_trgm`用于全文搜索和相似度比较。 九、监控与维护 通过`pg_statistic`、`pg_stat_...
避免全表扫描,利用索引,减少子查询,以及避免在where子句中使用非索引的函数操作,都是提高查询效率的有效手段。使用EXPLAIN分析查询计划,理解数据库如何执行查询,有助于找出性能瓶颈。 3. **分区表**:对于...
该资源包的执行效果查看地址:...“地图之家”专栏中的“1.(高级示例篇)leaflet+postgres+postgis+geoserver实现最短路径规划分析”。如下载有问题,可联系博主。 解压密码:leaflet
标题 "Datax实现增量同步数据到Postgres" 涉及到的是使用开源数据同步工具 Datax 进行数据迁移的场景,特别是针对从某个源数据库到PostgreSQL数据库的增量同步。Datax 是阿里巴巴开发的一款高效、稳定且强大的数据...
这将生成一对公钥和私钥,分别存储在 ~/.ssh/id_rsa和 ~/.ssh/id_rsa.pub文件中。 三、将公钥添加到authorized_keys文件 使用ssh-copy-id命令将公钥添加到authorized_keys文件: ssh-copy-id root@node2 这将将...
在 Oracle 中,使用 start with…connect by prior… 语句来实现递归查询,而在 Postgres 中,使用 with recursive… 语句来实现递归查询。 函数和存储过程的转化 在 Oracle 中,函数和存储过程使用 return 语句来...
在PostgreSQL中,有时需要利用C语言来编写高性能或安全的关键功能,这可以通过创建外部函数实现。本教程将详细介绍如何在PostgreSQL中实现C语言外部函数的调用,包括环境配置、源代码编写、编译、创建函数以及测试...