# 9.3.数学函数与算子

许多PostgreSQL类型都提供了数学运算符。对于没有标准数学约定的类型(例如日期/时间类型),我们将在后续章节中描述实际行为。

表9.4显示可用于标准数字类型的数学运算符。除非另有说明,否则操作员应视为接受*数字型适用于所有类型短整型,整数,比基特,数字的,真实的双精度.显示为接受的操作员积分型*适用于以下类型:短整型,整数比基特。除非另有说明,否则每种形式的运算符都返回与其参数相同的数据类型。涉及多个参数数据类型的调用,例如整数 + 数字的,通过使用这些列表后面出现的类型来解决。

表9.4.数学运算符

操作人员

描述

例子
数字型 + 数字型*数字型*

附加

2 + 35.
+ 数字型*数字型*

一元加号(无操作)

+ 3.53.5
数字型 - 数字型*数字型*

扣除

2 - 3-1
- 数字型*数字型*

反面

- (-4)4.
数字型 * 数字型*数字型*

乘法

2 * 36.
数字型 / 数字型*数字型*

除法(对于整数类型,除法将结果截断为零)

5.0 / 22.5000000000000000

5/22.

(-5) / 2-2
数字型 % 数字型*数字型*

模(余数);适用于短整型, 整数, 比基特数字的

5 % 41.
数字的 ^ 数字的数字的

双精度 ^ 双精度双精度

指数化

2 ^ 38.

与典型的数学实践不同,函数的多种用途^默认情况下,将从左到右关联:

2 ^ 3 ^ 3512

2 ^ (3 ^ 3)134217728
|/ 双精度双精度

平方根

|/ 25.05.
||/ 双精度双精度

立方根

||/ 64.04.
@ 数字型*数字型*

绝对值

@ -5.05.
积分型 & 积分型*积分型*

按位与

91 & 1511
积分型 | 积分型*积分型*

按位或

32 | 335
积分型 # 积分型*积分型*

位异或

17 # 520
~ 积分型*积分型*

按位取反

~1-2
积分型 << 整数*积分型*

按位左移

1 << 416
积分型 >> 整数*积分型*

按位右移

8 >> 22.

表9.5显示可用的数学函数。其中许多函数以多种形式提供,具有不同的参数类型。除非另有说明,函数的任何给定形式都会返回与其参数相同的数据类型;交叉型案例的解决方法与上述针对操作员的解释相同。使用的函数双精度数据主要在主机系统的C库上实现;因此,边界情况下的精度和行为可能因主机系统而异。

表9.5.数学函数

作用

描述

例子
防抱死制动系统 ( 数字型 ) → *数字型*

绝对值

abs(-17.4)17.4
立方根 ( 双精度 ) → 双精度

立方根

cbrt(64.0)4.
(用熟石膏、木板等)装天花板 ( 数字的 ) → 数字的

(用熟石膏、木板等)装天花板 ( 双精度 ) → 双精度

大于或等于参数的最近整数

ceil(42.2)43

ceil(-42.8)-42
天花板 ( 数字的 ) → 数字的

天花板 ( 双精度 ) → 双精度

大于或等于参数的最近整数(与(用熟石膏、木板等)装天花板)

天花板(95.3)96
( 双精度 ) → 双精度

将弧度转换为度

度(0.5)28.64788975654116
div ( y 数字的, 十、 数字的 ) → 数字的

的整数商*y/十、*(向零截断)

分区(9,4)2.
经验 ( 数字的 ) → 数字的

经验 ( 双精度 ) → 双精度

指数型(e提升到给定的功率)

exp(1.0)2.7182818284590452
阶乘的 ( 比基特 ) → 数字的

阶乘的

阶乘(5)120
地板 ( 数字的 ) → 数字的

地板 ( 双精度 ) → 双精度

小于或等于参数的最近整数

楼层(42.8)42

楼层(-42.8)-43
gcd ( 数字型, 数字型 ) → *数字型*

最大公约数(将两个输入相除而无余数的最大正数);返回0如果两个输入都为零;适用于整数, 比基特数字的

gcd(1071462)21
lcm ( 数字型, 数字型 ) → *数字型*

最小公倍数(两个输入的整数倍的最小严格正数);返回0如果任一输入为零;适用于整数, 比基特数字的

lcm(1071462)23562
自然对数 ( 数字的 ) → 数字的

自然对数 ( 双精度 ) → 双精度

自然对数

ln(2.0)0.6931471805599453
日志 ( 数字 ) → 数字

日志 ( 双精度 ) → 双精度

以 10 为底的对数

日志(100)2
日志10 ( 数字 ) → 数字

日志10 ( 双精度 ) → 双精度

以 10 为底的对数(与日志)

日志10(1000)3
日志 ( b 数字, x 数字 ) → 数字

的对数*x基地b*

日志(2.0,64.0)6.0000000000
min_scale ( 数字 ) → 整数

精确表示提供的值所需的最小比例(小数位数)

min_scale(8.4100)2
模组 ( 是的 数字类型, x 数字类型) →*数字类型*

剩余的*是的/x*;可以用来小字,整数,大整数, 和数字

模组(9, 4)1
圆周率( ) →双精度

π 的近似值

π()3.141592653589793
力量(一种 数字, b 数字 ) → 数字

力量 ( 一种 双精度, b 双精度 ) → 双精度

一种提升到权力b

权力(9, 3)729
弧度 ( 双精度 ) → 双精度

将度数转换为弧度

弧度(45.0)0.7853981633974483
圆形的(数字) →数字

圆形的(双精度) →双精度

四舍五入到最接近的整数。为了数字, 通过从零舍入来打破平局。为了双精度, 平局行为取决于平台,但“四舍五入”是最常见的规则。

回合(42.4)42
圆形的(v 数字,s 整数) →数字

回合*vs*小数位。通过从零四舍五入来打破平局。

圆形(42.4382, 2)42.44
规模(数字) →整数

参数的小数位数(小数部分的小数位数)

规模(8.4100)4
符号(数字) →数字

符号(双精度) →双精度

参数的符号(-1、0 或 +1)

标志(-8.4)-1
平方(数字 ) → 数字

平方 ( 双精度 ) → 双精度

平方根

平方(2)1.4142135623730951
trim_scale ( 数字 ) → 数字

通过删除尾随零来减小值的比例(小数位数)

trim_scale(8.4100)8.41
截断 ( 数字 ) → 数字

截断 ( 双精度 ) → 双精度

截断为整数(接近零)

截断(42.8)42

截断(-42.8)-42
截断 ( v 数字, s 整数 ) → 数字

截断*vs*小数位

截断(42.4382, 2)42.43
宽度桶 ( 操作数 数字, 低的 数字, 高的 数字, 数数 整数 ) → 整数

宽度桶 ( 操作数 双精度, 低的 双精度, 高的 双精度, 数数 整数 ) → 整数

返回存储桶的编号*操作数落在直方图中数数跨越范围的等宽桶低的高的*.退货0或者*数数*+1对于该范围之外的输入。

width_bucket(5.35, 0.024, 10.06, 5)3
宽度桶(操作数 任何兼容的,阈值 任何兼容数组) →整数

返回存储桶的编号*操作数给定一个列出桶下限的数组。退货0对于小于第一个下限的输入。操作数并且数组元素可以是具有标准比较运算符的任何类型。这阈值大堆必须分类*,否则会得到意想不到的结果。

width_bucket(now(),数组['beday'、'today'、'moody']::timestamptz[]2.

表9.6显示生成随机数的函数。

表9.6.随机函数

作用

描述

例子
随机的( ) →双精度

返回范围为0.0\<=x\<1.0的随机值

随机的0.897124072839091
种子(双精度) →无效的

为后续工作设定种子随机的电话;参数必须介于-1.0和1.0之间(包括-1.0和1.0)

固定种子(0.12345)

这个随机的函数使用简单的线性同余算法。它速度快,但不适用于加密应用;看到了吗pgcrypto模块,以获得更安全的替代方案。如果种子被称为,后续的一系列结果随机的当前会话中的呼叫可以通过重新发出来重复种子用同样的理由。

表9.7显示可用的三角函数。每个函数都有两种变体,一种以弧度度量角度,另一种以度度量角度。

表9.7.三角函数

作用

描述

例子
acos ( 双精度 ) → 双精度

反余弦,产生弧度

助理文书主任(1)0
acosd ( 双精度 ) → 双精度

反余弦,以度为单位

acosd(0.5)60
阿辛 ( 双精度 ) → 双精度

反正弦,产生弧度

asin(1)1.5707963267948966
阿辛德 ( 双精度 ) → 双精度

反正弦,以度为单位

asind(0.5)30
阿坦 ( 双精度 ) → 双精度

反切线,产生弧度

阿坦(1)0.7853981633974483
阿坦德 ( 双精度 ) → 双精度

反切线,以度为单位

阿坦德(1)45
atan2 ( y 双精度, 十、 双精度 ) → 双精度

反切线*y/十、*,产生弧度

atan2(1,0)1.5707963267948966
atan2d ( y 双精度, 十、 双精度 ) → 双精度

反切线*y/十、*,得到学位

atan2d(1,0)90
余弦 ( 双精度 ) → 双精度

余弦,弧度参数

cos(0)1.
cosd ( 双精度 ) → 双精度

余弦,单位为度

cosd(60)0.5
婴儿床 ( 双精度 ) → 双精度

余切,弧度参数

胶辊(0.5)1.830487721712452
科特 ( 双精度 ) → 双精度

余切,以度为单位的参数

cotd(45)1.
( 双精度 ) → 双精度

正弦,弧度参数

罪(1)0.8414709848078965
信德 ( 双精度 ) → 双精度

正弦,以度为单位的参数

辛德(30)0.5
棕褐色的 ( 双精度 ) → 双精度

切线,以弧度为单位的参数

谭(1)1.5574077246549023
坦然 ( 双精度 ) → 双精度

相切,以度为单位的参数

坦德(45)1.

# 笔记

另一种以度为单位测量角度的方法是使用单位变换函数弧度()学位()如前所示。然而,最好使用基于度数的三角函数,因为这样可以避免特殊情况下的舍入误差,例如辛德(30).

表9.8显示可用的双曲函数。

表9.8.双曲函数

作用

描述

例子
信义 ( 双精度 ) → 双精度

双曲正弦

新罕布什尔州(1)1.1752011936438014
科什 ( 双精度 ) → 双精度

双曲余弦

cosh(0)1.
( 双精度 ) → 双精度

双曲正切

谭(1)0.7615941559557649
反双曲正弦 ( 双精度 ) → 双精度

反双曲正弦

阿辛(1)0.881373587019543
阿科什 ( 双精度 ) → 双精度

反双曲余弦

acosh(1)0
反双曲正切 ( 双精度 ) → 双精度

反双曲正切

atanh(0.5)0.5493061443340548