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