文章目录
函数(function)是一些预定义好的代码模块,可以将输入进行计算和处理,最终输出一个结果值。Postgresql 可以分为两类:标量函数(scalar function)和聚合函数(aggregation function)。标量函数针对每个输入都会返回相应的结果,聚合函数针对一组输入汇总出一个结果。在第 13 篇中已经介绍了几个常见的聚合函数。
本篇主要介绍 Postgresql 提供的标量函数。为了便于学习,可以将常见的系统函数分为以下类别:数学函数、字符函数、日期时间函数以及类型转换函数。除了可以使用这些系统内置的函数之外,Postgresql 也支持创建自定义的函数(UDF)。
数学函数
数学函数和运算符用于执行算术运算,输入和输出通常都是数字类型。
算术运算符
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
+ | 加法 | 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 举报,一经查实,本站将立刻删除。