对于很多 PostgreSQL 类型,提供了数学运算符。对于没有标准数学约定(例如,日期/时间类型)的类型,我们在后续章节中描述实际行为。
表 9.4 展示了标准数字类型的数学运算符。除非另有说明,显示为接受 numeric_type
的运算符可用于所有类型 smallint
、integer
、bigint
、numeric
、real
和 double precision
。显示为接受 integral_type
的运算符可用于类型 smallint
、integer
和 bigint
。除非另有说明,每个运算符形式会返回与参数相同的数据类型。调用参数数据类型不同的情况,例如 integer
+
numeric
,通过在这些列表中使用后面的类型来解决。
表 9.4. 数学运算符
运算符 说明 示例 |
---|
加法
|
一元加(无操作)
|
减法
|
取反
|
乘法
|
除法(对于整数类型,除法将结果截断为零)
|
求模(余数);适用于
|
求幂
与传统的数学实践不同,默认情况下,使用
|
平方根
|
立方根
|
绝对值
|
按位 AND
|
按位 OR
|
按位异或
|
按位 NOT
|
按位左移
|
按位右移
|
表 9.5显示了可用的数学函数。其中很多函数都提供了多种形式,带有不同参数类型。除另行注明的以外,任何给定形式的函数都会返回与其参数相同的数据类型;跨类型方面的解决方式与上述针对运算符的解释相同。使用双精度
数据工作的函数大部分是在主机系统的 C 库之上实现的;因此,边界情况中的准确性和行为会根据主机系统而有所不同。
表 9.5 数学函数
表 9.6 显示用于生成随机数的函数。
表 9.6。随机函数
在 表 9.6 中列出的 random()
和 random_normal()
函数使用确定性伪随机数生成器。它是快速的,但不适用于加密应用;有关更安全的替代方法,请参阅 pgcrypto 模块。如果调用 setseed()
,则在当前会话中可以通过使用相同的自变量重新发布 setseed()
来重复这些函数的后续调用的结果系列。在同一个会话中没有先前的 setseed()
调用,则对这些函数中的任何一个的首次调用会从依赖于平台的随机位源中获取种子。
表 9.7 显示了可用的三角函数。这些函数中的每一个都有两个变体会,一个是度量以弧度为单位的角度,另一个是度量以度为单位的角度。
表 9.7 三角函数
度数制角的另一种处理方法是使用前面介绍的单位转换函数
和 radians()
。然而,首选使用基于度的三角函数,这样可以避免 degrees()
sind(30)
等特殊情况的舍入误差。
表 9.8 显示了可用的双曲函数。
表 9.8. 双曲函数