数学函数和操作符#

数学函数和操作符

PostgreSQL为很多类型提供了数学操作符。对于那些没有标准数学表达的类型(如日期/时间类型),我们将在后续小节中描述实际的行为。

展示了所有可用的数学操作符。

表 数学操作符

操作符

描述

例子

结果

+

2 + 3

5

-

2 - 3

-1

*

2 * 3

6

/

除(整数除法截断结果)

4 / 2

2

%

模(取余)

5 % 4

1

^

指数(从左至右结合)

2.0 ^ 3.0

8

|/

平方根

|/ 25.0

5

||/

立方根

||/ 27.0

3

!

阶乘

5 !

120

!!

阶乘(前缀操作符)

!! 5

120

@

绝对值

@ -5.0

5

&

按位与

91 & 15

11

|

按位或

32 | 3

35

#

按位异或

17 # 5

20

~

按位求反

~1

-2

<<

按位左移

1 << 4

16

>>

按位右移

8 >> 2

2

按位操作操作符只能用于整数数据类型,而其它的操作符可以用于全部数字数据类型。按位操作的操作符还可以用于位串类型bitbit varying, 如所示。

显示了可用的数学函数。在该表中,dp表示double precision。这些函数中有许多都有多种不同的形式,区别是参数不同。除非特别指明,任何特定形式的函数都返回和它的参数相同的数据类型。 处理double precision数据的函数大多数是在宿主系统的 C 库基础上实现的;因此,边界情况下的准确度和行为是根据宿主系统而变化的。

表 数学函数

函数

返回类型

描述

例子

结果

abs(x )

(和 输入相同)

绝对值

abs(-17.4)

17.4

cbrt(dp )

dp

立方根

cbrt(27.0)

3

ceil (dp or

numeric)

(和 输入相同)

不 小于参数的 最近的整数

ceil(-42.8)

-42

ceiling(dp or

numeric )

(和 输入相同)

不 小于参数的 最近的整数 ( ceil 的别名)

ceiling(-95.3)

-95

de grees(dp )

dp

把弧 度转为角度

degrees(0.5)

28.6478 897565412

div(y

numeric , x

numeric )

numeric

y / x 的整数商

div (9,4)

2

exp(dp or

numeric )

(和 输入相同)

指数

exp (1.0)

2.71828182845905

floor(dp or

numeric )

(和 输入相同)

不 大于参数的 最近的整数

floor(-42.8)

-43

ln(dp or

numeric )

(和 输入相同)

自然对数

ln(2.0)

0.693147180559945

log(dp or

numeric )

(和 输入相同)

以1 0为底的对数

log(100.0)

2

log10(dp or

numeric )

(和 输入相同)

以1 0为底的对数

log 10(100.0)

2

log(b

numeric , x

numeric )

numeric

以 b 为底的对数

log(2 .0, 64.0)

6.0 000000000

mod(y , x )

(和参数 类型相同)

y / x

的余数

mod (9,4)

1

pi()

dp

“π”常数

pi()

3.14159 265358979

power(a dp , b dp )

dp

求 a 的b 次幂

power( 9.0, 3.0)

729

power(a

numeric , b

numeric )

numeric

求 a

b 次幂

power( 9.0, 3.0)

729

radians(dp )

dp

把角 度转为弧度

radi ans(45.0)

0.785398 163397448

round(dp or

numeric )

(和 输入相同)

圆整为最 接近的整数

ro und(42.4)

42

round(v

numeric , s int )

numeric

圆整为 s 位小数数字

round(42 .4382, 2)

42.44

scale (numeric )

integer

参数的精 度(小数点 后的位数)

sc ale(8.41)

2

sign(dp or

numeric )

(和 输入相同)

参数 的符号(-1, 0, +1)

s ign(-8.4)

-1

sqrt(dp or

numeric )

(和 输入相同)

平方根

sqrt (2.0)

1.4142 135623731

trunc(dp or

numeric )

(和 输入相同)

截断( 向零靠近)

tr unc(42.8)

42

trunc(v

numeric , s int )

numeric

截 断为 s 位小数 位置的数字

trunc(42 .4382, 2)

42.43

width_ bucket(op dp , b1 dp , b2 dp , count int )

int

返回一 个桶号,这 个桶是在一 个柱状图中 opera nd 将被 分配的那个 桶,该柱状 图有 c ount 个 散布在范围 b1 到 b2 上的等 宽桶。对于 超过该范围 的输入,将 返回 0 或者count +1

widt h_bucket(5. 35, 0.024, 10.06, 5)

3

width_ bucket(op

numeric , b1

numeric , b2

numeric , count int )

int

返回一 个桶号,这 个桶是在一 个柱状图中 opera nd 将被 分配的那个 桶,该柱状 图有 c ount 个 散布在范围 b1 到 b2 上的等 宽桶。对于 超过该范围 的输入,将 返回 0 或者count +1

widt h_bucket(5. 35, 0.024, 10.06, 5)

3

width_bucket(operand an yelement , th resholds

anyarray )

int

返回一个 桶号,这个 桶是在给定 数组中operand 将被分配 的桶,该数 组列出了桶 的下界。对 于一个低于 第一个下界 的输入返回 0 。 thresh olds 数 组 必须被 排好序 , 最小 的排在最前 面,否则将 会得到意想 不到的结果

width_bucke t(now(), ar ray[‘yester day’, ‘toda y’, ‘tomorr ow’]::times tamptz[])

2

展示了用于产生随机数的函数。

表 随机函数

函数

返回类型

描述

random()

dp

范围 0.0 <= x < 1.0 中的随机值

setseed(dp)

void

为后续的 random()调用设置种子(值为于 -1.0 和 1.0 之间,包括边界值)

random()函数使用了一个简单的线性共轭算法。 它的速度很快,但不适合于密码学应用;关于更安全的替代方案,请参阅 pgcrypto模块。 如果setseed()被调用,那么当前会话中的后续random()调用的结果可以通过使用相同的参数重新发布setseed()来重复。

显示了可用的三角函数。所有这些函数都有类型为double precision的参数和返回类型。每一种三角函数都有两个变体,一个以弧度度量角,另一个以角度度量角。

表 三角函数

函数(弧度)

函数(角度)

描述

acos(x)

acosd(x)

反余弦

asin(x)

asind(x)

反正弦

atan(x)

atand(x)

反正切

atan2(y, x)

atan2d(y, x)

y/ x 的反正切

cos(x)

cosd(x)

余弦

cot(x)

cotd(x)

余切

sin(x)

sind(x)

正弦

tan(x)

tand(x)

正切

备注

注意

另一种使用以角度度量的角的方法是使用早前展示的单位转换函数radians()degrees()。不过,使用基于角度的三角函数更好,因为这类方法能避免sind(30)等特殊情况下的舍入偏差。

显示的是 可用的双曲函数。 所有这些函数接收参数,并返回类型为double precision的值。

表 双曲函数

函数

描述

举例

结果

sinh(x)

双曲正弦

sinh(0)

0

cosh(x)

双曲余弦

cosh(0)

1

tanh(x)

双曲切线 反双曲正弦

tanh(0) asinh(0)

0 0

asinh(x)

反双曲余弦

acosh(1)

0

acosh(x)

反双曲切线

atanh(0)

0

atanh(x)