标准 SQL 中的数学函数

所有数学函数都具有以下行为:

  • 如果任一输入参数为 NULL,则返回 NULL
  • 如果任一参数为 NaN,则返回 NaN

ABS

ABS(X)

说明

计算绝对值。如果参数是整数,而输出值无法用同一类型表示,则返回一个错误;仅最大负输入值(不具有正数表示形式)会发生此情况。对 +/-inf 参数返回 +inf

SIGN

SIGN(X)

说明

分别对负参数、零和正参数返回 -1、0 或 +1。对于浮点参数,此函数不区分正零和负零。对 NaN 参数返回 NaN

IS_INF

IS_INF(X)

说明

如果值为正无穷或负无穷,则返回 TRUE。对 NULL 输入返回 NULL

IS_NAN

IS_NAN(X)

说明

如果值为 NaN 值,则返回 TRUE。对 NULL 输入返回 NULL

IEEE_DIVIDE

IEEE_DIVIDE(X, Y)

说明

用 X 除以 Y;此函数始终有效。返回 FLOAT64。不同于除法运算符 (/),如果除数为零或溢出,此函数不会生成错误。

特殊情况:

  • 如果结果溢出,则返回 +/-inf
  • 如果 Y=0 且 X=0,则返回 NaN
  • 如果 Y=0 且 X!=0,则返回 +/-inf
  • 如果 X = +/-inf 且 Y = +/-inf,则返回 NaN

下表进一步说明了 IEEE_DIVIDE 的行为。

IEEE_DIVIDE 的特殊情况

下表列出了 IEEE_DIVIDE 的特殊情况。

分子数据类型 (X) 分母数据类型 (Y) 结果值
除 0 外的任何值 0 +/-inf
0 0 NaN
0 NaN NaN
NaN 0 NaN
+/-inf +/-inf NaN

RAND

RAND()

说明

在范围 [0, 1)(包含 0,不包含 1)内生成 FLOAT64 类型的伪随机值。

SQRT

SQRT(X)

说明

计算 X 的平方根。如果 X 小于 0,则生成错误。如果 X 为 +inf,则返回 +inf

POW

POW(X, Y)

说明

返回 X 的 Y 次幂的值。如果结果下溢且不可表示,则函数返回值 0。如果下述任一条件为 true,则返回一个错误:

  • X 是小于 0 的有限值且 Y 是非整数
  • X 是 0 且 Y 是小于 0 的有限值

下表进一步说明了 POW() 的行为。

POWER

POWER(X, Y)

说明

相当于 POW()

POW(X, Y)POWER(X, Y) 的特殊情况

下面是 POW(X, Y)POWER(X, Y) 的特殊情况。

X Y POW(X, Y) 或 POWER(X, Y)
1.0 任何值(包括 NaN 1.0
任何值(包括 NaN 0 1.0
-1.0 +/-inf 1.0
ABS(X) < 1 -inf +inf
ABS(X) > 1 -inf 0
ABS(X) < 1 +inf 0
ABS(X) > 1 +inf +inf
-inf Y < 0 0
-inf Y > 0 如果 Y 为奇整数,则为 -inf;否则为 +inf
+inf Y < 0 0
+inf Y > 0 +inf

EXP

EXP(X)

说明

计算 e 的 X 次幂,也被称为自然指数函数。如果结果下溢,此函数返回 0。如果结果上溢,则生成错误。如果 X 是 +/-inf,则此函数返回 +inf 或 0。

LN

LN(X)

说明

计算 X 的自然对数。如果 X 小于或等于 0,则生成错误。如果 X 是 +inf,则此函数返回 +inf

LOG

LOG(X [, Y])

说明

如果只存在 X,则 LOG 相当于 LN。如果还存在 Y,则 LOG 计算以 Y 为底数的 X 的对数。在以下情况下将生成错误:

  • X 小于或等于 0
  • Y 等于 1.0
  • Y 小于或等于 0。

下表进一步说明了 LOG(X, Y) 的行为。

LOG(X, Y) 的特殊情况

X Y LOG(X, Y)
-inf 任意值 NaN
任意值 +inf NaN
+inf 0.0 Y < 1.0 -inf
+inf Y > 1.0 +inf

LOG10

LOG10(X)

说明

LOG 类似,但计算的是以 10 为底数的对数。

GREATEST

GREATEST(X1,...,XN)

说明

如果任一输入为 NULL,则返回 NULL。如果任一输入为 NaN,则返回 NaN。否则根据比较得出更大值,返回 X1,...,XN 中的最大值。

LEAST

LEAST(X1,...,XN)

说明

如果任一输入为 NULL,则返回 NULL。如果任一输入为 NaN,则返回 NaN。否则根据比较得出更小值,返回 X1,...,XN 中的最小值。

DIV

DIV(X, Y)

说明

返回 X 被 Y 整除的结果。如果除数为 0,则返回一个错误。除数为 -1 时可能溢出。请查看下表,了解可能的结果类型。

SAFE_DIVIDE

SAFE_DIVIDE(X, Y)

说明

等同于除法运算符 (/),但如果发生错误,则返回 NULL,例如除以 0 时的错误。

MOD

MOD(X, Y)

说明

取模函数:返回 X 除以 Y 的余数。返回值的符号与 X 相同。如果 Y 为 0,则生成一个错误。请查看下表,了解可能的结果类型。

ROUND

ROUND(X [, N])

说明

如果只存在 X,则 ROUND 将 X 向最近的整数舍入。如果存在 N,ROUND 将 X 舍入到小数点后 N 个小数位。如果 N 为负数,则 ROUND 将舍掉小数点取整。则向远离 0 的方向按中间数舍入。如果发生溢出,则生成错误。

TRUNC

TRUNC(X [, N])

说明

如果只存在 X,则 TRUNC 将 X 向最近的整数舍入,且此整数的绝对值不超过 X 的绝对值。如果还存在 N,则 TRUNC 的行为类似于 ROUND(X, N),但始终向 0 舍入且永不溢出。

CEIL

CEIL(X)

说明

返回不小于 X 的最小整数值(FLOAT64 类型)。

CEILING

CEILING(X)

说明

相当于 CEIL(X)

FLOOR

FLOOR(X)

说明

返回不大于 X 的最大整数值(FLOAT64 类型)。

舍入函数行为示例

BigQuery 舍入函数的行为示例:

输入“X” ROUND(X) TRUNC(X) CEIL(X) FLOOR(X)
2.0 2.0 2.0 2.0 2.0
2.3 2.0 2.0 3.0 2.0
2.8 3.0 2.0 3.0 2.0
2.5 3.0 2.0 3.0 2.0
-2.3 -2.0 -2.0 -2.0 -3.0
-2.8 -3.0 -2.0 -2.0 -3.0
-2.5 -3.0 -2.0 -2.0 -3.0
0 0 0 0 0
+/-inf +/-inf +/-inf +/-inf +/-inf
NaN NaN NaN NaN NaN

COS

COS(X)

说明

计算 X 的余弦。始终有效。

COSH

COSH(X)

说明

计算 X 的双曲余弦。如果发生溢出,则生成错误。

ACOS

ACOS(X)

说明

计算 X 的反余弦的主值。返回值在 [0,] 范围内。如果 X 是超出 [-1, 1] 范围的有限值,则生成错误。

ACOSH

ACOSH(X)

说明

计算 X 的反双曲余弦。如果 X 是小于 1 的有限值,则生成错误。

SIN

SIN(X)

说明

计算 X 的正弦。始终有效。

SINH

SINH(X)

说明

计算 X 的双曲正弦。如果发生溢出,则生成错误。

ASIN

ASIN(X)

说明

计算 X 的反正弦的主值。返回值在 [-π/2,π/2] 范围内。如果 X 是超出 [-1, 1] 范围的有限值,则生成错误。

ASINH

ASINH(X)

说明

计算 X 的反双曲正弦。不会失效。

TAN

TAN(X)

说明

计算 X 的正切值。如果发生溢出,则生成错误。

TANH

TANH(X)

说明

计算 X 的双曲正切。不会失效。

ATAN

ATAN(X)

说明

计算 X 的反正切的主值。返回值在 [-π/2,π/2] 范围内。不会失效。

ATANH

ATANH(X)

说明

计算 X 的反双曲正切。如果 X 的绝对值大于或等于 1,则生成错误。

ATAN2

ATAN2(Y, X)

说明

通过使用两个参数的符号确定象限,计算 Y/X 的反正切的主值。返回值在 [-π,π] 范围内。下表进一步说明了此函数的行为。

ATAN2() 的特殊情况

Y X ATAN2(Y, X)
NaN 任意值 NaN
任意值 NaN NaN
0 0 0、π 或 -π(取决于 X 和 Y 的符号)
有限值 -inf π 或 -π(取决于 Y 的符号)
有限值 +inf 0
+/-inf 有限值 π/2 或 π/2(取决于 Y 的符号)
+/-inf -inf ¾π 或 -¾π(取决于 Y 的符号)
+/-inf +inf π/4 或 -π/4(取决于 Y 的符号)

三角函数和双曲线舍入函数的特殊情况

X COS(X) COSH(X) ACOS(X) ACOSH(X) SIN(X) SINH(X) ASIN(X) ASINH(X) TAN(X) TANH(X) ATAN(X) ATANH(X)
+/-inf NaN =+inf NaN =+inf NaN =+inf NaN =+inf NaN =+1.0 π/2 NaN
-inf NaN =+inf NaN NaN NaN -inf NaN -inf NaN -1.0 -π/2 NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面