# 9.3.数学函数与算子
许多PostgreSQL类型都提供了数学运算符。对于没有标准数学约定的类型(例如日期/时间类型),我们将在后续章节中描述实际行为。
表9.4显示可用于标准数字类型的数学运算符。除非另有说明,否则操作员应视为接受*数字型
适用于所有类型短整型
,整数
,比基特
,数字的
,真实的
和双精度
.显示为接受的操作员积分型
*适用于以下类型:短整型
,整数
和比基特
。除非另有说明,否则每种形式的运算符都返回与其参数相同的数据类型。涉及多个参数数据类型的调用,例如整数
+
数字的
,通过使用这些列表后面出现的类型来解决。
表9.4.数学运算符
操作人员 描述 例子 |
---|
数字型 + 数字型 → * 数字型* 附加 2 + 3 → 5. |
+ 数字型 → * 数字型* 一元加号(无操作) + 3.5 → 3.5 |
数字型 - 数字型 → * 数字型* 扣除 2 - 3 → -1 |
- 数字型 → * 数字型* 反面 - (-4) → 4. |
数字型 * 数字型 → * 数字型* 乘法 2 * 3 → 6. |
数字型 / 数字型 → * 数字型* 除法(对于整数类型,除法将结果截断为零) 5.0 / 2 → 2.5000000000000000 5/2 → 2. (-5) / 2 → -2 |
数字型 % 数字型 → * 数字型* 模(余数);适用于 短整型 , 整数 , 比基特 和数字的 5 % 4 → 1. |
数字的 ^ 数字的 → 数字的 双精度 ^ 双精度 → 双精度 指数化 2 ^ 3 → 8. 与典型的数学实践不同,函数的多种用途 ^ 默认情况下,将从左到右关联:2 ^ 3 ^ 3 → 512 2 ^ (3 ^ 3) → 134217728 |
|/ 双精度 → 双精度 平方根 |/ 25.0 → 5. |
||/ 双精度 → 双精度 立方根 ||/ 64.0 → 4. |
@ 数字型 → * 数字型* 绝对值 @ -5.0 → 5. |
积分型 & 积分型 → * 积分型* 按位与 91 & 15 → 11 |
积分型 | 积分型 → * 积分型* 按位或 32 | 3 → 35 |
积分型 # 积分型 → * 积分型* 位异或 17 # 5 → 20 |
~ 积分型 → * 积分型* 按位取反 ~1 → -2 |
积分型 << 整数 → * 积分型* 按位左移 1 << 4 → 16 |
积分型 >> 整数 → * 积分型* 按位右移 8 >> 2 → 2. |
表9.5显示可用的数学函数。其中许多函数以多种形式提供,具有不同的参数类型。除非另有说明,函数的任何给定形式都会返回与其参数相同的数据类型;交叉型案例的解决方法与上述针对操作员的解释相同。使用的函数双精度
数据主要在主机系统的C库上实现;因此,边界情况下的精度和行为可能因主机系统而异。
表9.5.数学函数
表9.6显示生成随机数的函数。
表9.6.随机函数
作用 描述 例子 |
---|
随机的 ( ) →双精度 返回范围为0.0\<=x\<1.0的随机值 随机的 →0.897124072839091 |
种子 (双精度 ) →无效的 为后续工作设定种子 随机的 电话;参数必须介于-1.0和1.0之间(包括-1.0和1.0)固定种子(0.12345) |
这个随机的
函数使用简单的线性同余算法。它速度快,但不适用于加密应用;看到了吗pgcrypto模块,以获得更安全的替代方案。如果种子
被称为,后续的一系列结果随机的
当前会话中的呼叫可以通过重新发出来重复种子
用同样的理由。
表9.7显示可用的三角函数。每个函数都有两种变体,一种以弧度度量角度,另一种以度度量角度。
表9.7.三角函数
# 笔记
另一种以度为单位测量角度的方法是使用单位变换函数弧度()
和学位()
如前所示。然而,最好使用基于度数的三角函数,因为这样可以避免特殊情况下的舍入误差,例如辛德(30)
.
表9.8显示可用的双曲函数。
表9.8.双曲函数