9.3. 数学函数和运算符#
为许多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. 双曲函数
函数 描述 示例 |
|---|
双曲正弦
|
双曲余弦
|
双曲正切
|
双曲正弦的反函数
|
双曲余弦的反函数
|
双曲正切的反函数
|
