微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

《PostgreSQL 开发指南》第 16 篇 常用函数一

文章目录

函数(function)是一些预定义好的代码模块,可以将输入进行计算和处理,最终输出一个结果值。Postgresql 可以分为两类:标量函数(scalar function)和聚合函数(aggregation function)。标量函数针对每个输入都会返回相应的结果,聚合函数针对一组输入汇总出一个结果。在第 13 篇中已经介绍了几个常见的聚合函数

本篇主要介绍 Postgresql 提供的标量函数。为了便于学习,可以将常见的系统函数分为以下类别:数学函数、字符函数、日期时间函数以及类型转换函数。除了可以使用这些系统内置的函数之外,Postgresql支持创建自定义函数(UDF)。

数学函数

数学函数和运算符用于执行算术运算,输入和输出通常都是数字类型。

算术运算符

Postgresql 支持以下算术运算符:

运算符 描述 示例 结果
+ 加法 2 + 3 5
- 减法 2 - 3 -1
* 乘法 2 * 3 6
/ 整除 5 / 2 2
% 模除(求余) 5 % 4 1
^ 求幂(左边为底数,右边为指数) 2.0 ^ 3.0 8
|/ 平方根 |/ 25.0 5
||/ 立方根 ||/ 27.0 3
! 阶乘 5 ! 120
!! 阶乘(前置运算符) !! 5 120
@ 绝对值 @ -5.0 5
& 按位与 91 & 15 11
| 按位或 32 | 3 35
# 按位异或 17 # 5 20
~ 按位非 ~1 -2
<< 按位左移 1 << 4 16
>> 按位右移 8 >> 2 2

其中,按位运算只对整型数字类型有效;左移 N 位相当于乘以 2 的 N 次方,右移 N 位相当于除以 2 的 N 次方。

绝对值

abs(x) 函数用于计算 x 的绝对值。例如:

SELECT abs(-17.4);
|  abs |
|------|
| 17.4 |

取整函数

ceil(dp)/ceiling(dp) 函数用于计算大于或等于 dp 的最小整数,floor(dp) 函数用于计算小于或等于 dp 的最大整数,round(dp) 函数四舍五入为整数,trunc(dp) 函数向零取整。

SELECT ceil(-42.8), floor(-42.8), round(12.45), trunc(12.8);
| ceil | floor | round | trunc |
|------|-------|-------|-------|
|  -42 |   -43 |    12 |    12 |

另外,round(dp, s) 函数四舍五入到 s 位小数,trunc(dp, s) 函数截断到 s 位小数。

乘方与开方

power(a, b) 函数计算 a 的 b 次方,sqrt(dp) 函数计算 dp 的平方根,cbrt(dp) 函数计算 dp 的立方根。

SELECT power(2, 3), sqrt(4), cbrt(27);
| power | sqrt |               cbrt |
|-------|------|--------------------|
|     8 |    2 | 3.0000000000000004 |

指数与对数

exp(dp) 函数计算以自然常数 e 为底的指数,ln(dp) 函数计算以自然常数 e 为底数的对数,log(dp)/log10(dp) 函数计算以 10 为底的对数,log(b, x) 函数计算以 b 为底的对数。

SELECT exp(1.0), ln(2.718281828459045), log(100), log(2.0, 16.0);
|               exp |                 ln | log | log |
|-------------------|--------------------|-----|-----|
| 2.718281828459045 | 0.9999999999999999 |   2 |   4 |

整数商和余数

div(y, x) 函数计算 y 除以 x 的整数商,mod(y, x) 函数计算 y 除以 x 的余数。

SELECT div(9,4), mod(9,4);
| div | mod |
|-----|-----|
|   2 |   1 |

弧度与角度

degrees(dp) 函数用于将弧度转为角度,radians(dp) 函数用于将角度转弧度。

SELECT degrees(1.57), radians(90.0);
|           degrees |            radians |
|-------------------|--------------------|
| 89.95437383553924 | 1.5707963267948966 |

常量 π

pi() 函数用于返回常量“π”的值。

SELECT pi();
|                pi |
|-------------------|
| 3.141592653589793 |

符号函数

sign(dp) 返回参数的正负号,可能的结果为 -1、0、+1。

SELECT sign(-8.4);
| sign |
|------|
|   -1 |

生成随机

Postgresql 提供了用于返回一个随机数的函数 random()。

SELECT random();
|              random |
|---------------------|
| 0.07772749848663807 |

random() 返回一个大于等于 0 小于 1 的随机数,类型为双精度浮点数。

另外,setseed(dp) 函数可以为随后一次运行的 random() 函数设置种子数,参数范围:-1.0 <= dp <= 1.0。

SELECT setseed(0);
SELECT random();
|             random |
|--------------------|
| 0.8401877167634666 |

相同的种子可以得到相同的随机数,用于重现结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐