PostgreSQL是一个强大而易于使用的数据库管理系统,它提供安全、快速和非常直观的功能,让你专注于数据而不是查询语法。
PostgreSQL使其使用非常简单的一种方式是预定义函数的功能。这些函数允许你调用它们并传递所需的参数以获得输出。
在这篇文章中,我们将给你一个最常见的PostgreSQL函数的小抄,甚至告诉你如何在需要时定义自定义的函数。
数学函数
PostgreSQL函数的第一类是数学函数。这些函数允许你对传递的参数进行数学运算。
| 函数 | 功能 |
|---|---|
| abs(x) | 返回x的绝对值 |
| pi() | 返回π的常数值 |
| sqrt(x) | 返回x的平方根 |
| mod(x,y) | 返回x和y的模数值 |
| Trunc(x) | 将x截断为0 |
| exp(x) | 返回x的指数值 |
| 随机() | 返回0和1.0之间的随机值 |
| pow(a, b) | 将a提高到b的幂 |
| 阶乘(x) | 返回x的阶乘值 |
| ln() | 自然对数 |
这些是你可以在PostgreSQL查询中使用的一些常用数学函数。
聚合函数
另一组标准的PostgreSQL函数是聚合函数。这些类型的函数在一组数值上执行一个动作,并返回一个单一的结果。
流行的PostgreSQL 聚合函数包括
| 函数 | 功能 |
|---|---|
| avg() | 返回一组数值的平均数 |
| min() | 给定一组数值的最小值。 |
| max() | 一组给定数值的最大值 |
| sum() | 输入值的总和 |
| count() | 非空值的行数 |
| count(*) | 返回输入行的数量 |
字符串函数
在PostgreSQL中,字符串函数负责处理字符串值并返回一个值。
常见的字符串函数包括
| 函数 | 功能 | ||
|---|---|---|---|
| lower() | 将输入的字符串转换为小写字母 | ||
| upper() | 将输入的字符串转换为大写字母 | ||
| char_length() | 返回字符串中的字符数 | ||
| ** | ** | 将左边的字符串与右边的字符串连接起来 | |
| bit_length() | 字符串中的比特数 | ||
| reverse() | 对输入的字符串进行反转 | ||
| repeat() | 重复输入的字符串,重复指定的次数。 |
日期和时间函数
顾名思义,时间和日期函数是处理日期和时间数据的。
常见的函数包括。
| 函数 | 功能 |
|---|---|
| now() | 返回当前日期和时间 |
| current_time() | 当前的时间 |
| current_date() | 返回当前的日期 |
| age() | 以年、月、日的形式返回当前日期的符号化结果 |
| extract() | 从一个时间戳中提取子字段 |
几何函数
几何函数对传递的数值集进行几何运算。尽管你可能不会发现自己经常使用这些函数,但它们确实很方便。
这类函数的常见例子包括。
| 函数 | 函数 |
|---|---|
| 面积 | 返回物体的面积。 |
| 直径 | 返回圆的直径 |
| 长度 | 返回路径的长度 |
| box(circle) | 转换圆为盒子 |
| box(point) | 将点转换为一个空盒子 |
| path(polygon) | 将多边形转换为路径 |
| 多边形(路径) | 将路径转换为多边形 |
网络地址函数
网络函数在处理inet和cidr类型时非常有用。常见的函数包括。
| 函数 | 功能 |
|---|---|
| host(inet) | 以文本形式返回IP地址 |
| masklen(inet) | 返回网络掩码的长度 |
| network(inet) | 返回一个地址的网络部分 |
| family(inet) | 提取地址的家族 |
| netmask() | 返回地址的网络掩码 |
| inet_same_family(inet, inet) | 如果两个inet地址是同一族,则返回true |
以上的函数只是PostgreSQL支持的函数的一部分。
如何创建PostgreSQL的用户函数
在某些情况下,你需要创建一个自定义函数。PostgreSQL 允许你用名称、参数和返回类型来创建这种函数。
要在PostgreSQL中创建一个函数,请使用CREATE FUNCTION语句。
创建一个自定义函数的一般语法如所示。
CREATE FUNCTION function_name(paramaters)
RETURNS data_type;
LANGUAGE procedural_language_type;
AS
$$
DECLARE
-- declare your variables here
BEGIN
-- code what the function does
END
$$
让我们一步一步地分解上面的语法。
- 我们首先使用CREATE FUNCTION语句,然后是函数名称。函数名称可以是任何有意义的东西。
- 接下来,我们在一对圆括号内传递函数参数。参数的数量可以从0到无限大。
- 在函数块内(用缩进表示,尽管不是必须的),我们使用RETURN关键字,后面是函数返回的数据类型。
- 下一部分定义了函数的程序语言,其中最常见的是PLPGSQL。其他PostgreSQL程序性函数包括PLTCL、PLPERL、PLPYTHON。
- 最后,我们使用双美元符号来初始化函数。这就是我们声明变量和放在开始和结束块内的函数逻辑的地方。
提示:PostgreSQL中的自定义函数与程序非常相似。然而,与程序不同的是,函数返回一个值。
自定义函数实例
让我们举例说明一个简单的函数,它可以获取符合一个简单标准的项目的数量。
让我们以sakila数据库为例。我们可以得到租值在2到4美元之间的电影的数量。
一个简单的函数是。
CREATE FUNCTION get_films(x int, y int)
RETURNS int
LANGUAGE PLPGSQL
AS
$$
DECLARE
num_films integer;
BEGIN
SELECT count(*)
INTO num_films
FROM film
WHERE rental_rate BETWEEN x AND y;
RETURN num_films;
END;
$$
一旦我们声明了这个函数,我们就可以调用它,并以如下方式传递数值。
SELECT get_films(2, 4) AS number_of_films;
一旦我们运行上面的查询,我们应该得到符合上述条件的电影数量。

在大多数情况下,你不需要定义这样的函数,因为有其他更简单的内置方法来完成这样的任务。既然如此,上面的函数说明了如何使用函数。
总结
在本教程中,我们说明了常见的PostgreSQL函数,以帮助更有效地执行任务。最后,我们向你展示了如何创建和使用函数来满足自定义需求。
谢谢你的阅读,祝你实验愉快