对于许多 PostgreSQL 类型,都提供了数学运算符。对于没有标准数学约定(例如,日期/时间类型)的类型,我们在后续章节中描述实际行为。
表 9.4 显示了可用于标准数值类型的数学运算符。除非另有说明,接受 numeric_type 的运算符适用于所有类型 smallint、integer、bigint、numeric、real 和 double precision。接受 integral_type
的运算符适用于类型 smallint、integer 和 bigint。除非另有说明,每种形式的运算符都返回与其参数相同的数据类型。涉及多种参数数据类型(例如,integer + numeric)的调用,将使用列表中出现较晚的类型进行解析。
表 9.4. 数学运算符
|
运算符 描述 示例 |
|---|
|
加法。
|
|
一元加号(无操作)
|
|
减法。
|
|
负号
|
|
乘法。
|
|
除法(对于整数类型,除法将结果向零截断)
|
|
模(余数);适用于
|
|
幂运算
与典型的数学实践不同,
|
|
平方根
|
|
立方根
|
|
绝对值
|
|
按位与
|
|
按位或
|
|
按位异或
|
|
按位非
|
|
按位左移
|
|
按位右移
|
表 9.5
显示了可用的数学函数。其中许多函数都有多种形式,参数类型不同。除非另有说明,函数的任何一种形式都返回与其参数相同的数据类型;跨类型的情况与上面为运算符解释的相同。处理 double precision 数据的函数大部分是基于宿主系统的 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. 双曲函数