PostgreSQL为很多类型提供了数学操作符。对于那些没有标准数学表达的类型(如日期/时间类型),我们将在后续小节中描述实际的行为。
表 9.4 显示了可用于标准数字类型的数学操作符。.
除非另有说明, 显示为可接受 numeric_type
的操作符对所有的 smallint
、integer
、bigint
、numeric
、real
和 double precision
类型都可用。
显示为可接受 integral_type
的操作符对 smallint
、integer
和 bigint
类型是可用的。
除了特别说明之处,操作符的每种形式都返回与其参数相同的数据类型。
涉及多个参数数据类型的调用, 例如 integer
+
numeric
,可通过使用这些列表中稍后出现的类型来解析。
表 9.4. 数学操作符
操作符 描述 例子 |
---|
加
|
一元加(无操作)
|
减
|
否定
|
乘
|
除(对于整型,除法将结果截断为零)
|
模(取余); 适用于
|
指数
不像典型的数学实践,多次使用
|
平方根
|
立方根
|
绝对值
|
按位与(AND)
|
按位或(OR)
|
按位异或(exclusive OR)
|
按位求反(NOT)
|
按位左移
|
按位右移
|
表 9.5 显示了可用的数学函数。
许多这样的函数以多种具有不同的参数类型的形式提供。
除非注明,任何给定形式的函数都返回与其参数相同的数据类型;跨类型情况的解决方法与上述对操作符的解释相同。
使用double precision
数据的函数大多是在主机系统的C库上实现的;
因此,边界情况下的准确性和行为会因主机系统的区别而不同。
表 9.5. 数学函数
函数 描述 例子 |
---|
绝对值
|
立方根
|
大于或等于参数的最接近的整数
|
大于或等于参数的最接近的整数 (与
|
将弧度转换为角度
|
|
误差函数
|
互补误差函数 (
|
指数 (
|
阶乘
|
小于或等于参数的最接近整数
|
最大公约数 (能将两个输入数整除而无余数的最大正数); 如果两个输入为零则返回
|
最小公倍数(两个输入的整数倍的最小的严格正数);如果任意一个输入值为零则返回
|
自然对数
|
以10为底的对数
|
以10为底的对数 (与
|
以
|
精确表示所提供值所需的最小刻度(小数位数)
|
|
π的近似值
|
|
将角度转换为弧度
|
四舍五入到最近的整数。
对于
|
Rounds
|
参数的刻度(小数点后的位数)
|
参数的符号 (-1, 0, 或 +1)
|
平方根
|
通过删除尾数部分的零来降低值的刻度(小数位数)
|
截断整数 (向零靠近)
|
截断
|
返回包含
|
返回一个柱号,这个柱是在给定数组中
|
表 9.6展示了用于产生随机数的函数。
表 9.6. 随机函数
函数 描述 例子 |
---|
返回一个范围 0.0 <= x < 1.0 中的随机值
|
返回一个来自正态分布的随机值,使用给定的参数;
|
设置后续
|
random()
函数使用一个确定性的伪随机数生成器。
它速度快,但不适合用于加密应用;请参阅 pgcrypto 模块以获取更安全的替代方案。
如果调用了 setseed()
,则在当前会话中后续
random()
调用的结果序列可以通过使用相同参数重新调用
setseed()
来重复。
在同一会话中没有任何先前的 setseed()
调用的情况下,
第一次 random()
调用会从一个平台相关的随机位源中获取种子。
这些说明同样适用于 random_normal()
。
表 9.7显示了可用的三角函数。 每一种这样的函数都有两个变体,一个以弧度度量角,另一个以角度度量角。
表 9.7. 三角函数
函数 描述 例子 |
---|
反余弦,结果为弧度
|
反余弦,结果为度数
|
反正弦,结果为弧度
|
反正弦,结果为度数
|
反正切,结果为弧度
|
反正切,结果为度数
|
|
|
余弦,参数为弧度
|
余弦,参数为度数
|
余切,参数为弧度
|
余切,参数为度数
|
正弦,参数为弧度
|
正弦,参数为度数
|
正切,参数为弧度
|
正切,参数为度数
|
另一种使用以角度度量的角的方法是使用早前展示的单位转换函数
和radians()
。不过,使用基于角度的三角函数更好,因为这类方法能避免degrees()
sind(30)
等特殊情况下的舍入偏差。
表 9.8显示的是可用的双曲函数。
表 9.8. 双曲函数
函数 描述 例子 |
---|
双曲正弦
|
双曲余弦
|
双曲切线
|
反双曲正弦
|
反双曲余弦
|
反双曲切线
|