全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
MaxCompute

数学函数

更新时间:2017-10-11 14:05:54

ABS

函数声明

  1. Double abs(Double number)
  2. Bigint abs(Bigint number)
  3. Decimal abs(Decimal number)

函数说明

该函数用于返回 number 的绝对值。

参数说明

number:Double,Bigint 或 Decimal 类型时,输入为 Bigint,返回 Bigint,输入为 Double,返回 Double 类型,输入为 Decimal,返回 Decimal 类型。若输入为 String 类型,会隐式转换为 Double 类型后参与运算,其它类型抛异常。

返回值

返回 Double,Bigint 或 Decimal 类型,取决于输入参数的类型。若输入为 null,则返回 null。

注意

当输入 Bigint 类型的值超过 Bigint 的最大表示范围时,会返回 Double 类型,这种情况下可能会损失精度。

示例如下

  1. abs(null) = null
  2. abs(-1) = 1
  3. abs(-1.2) = 1.2
  4. abs("-2") = 2.0
  5. abs(122320837456298376592387456923748) = 1.2232083745629837e32

下面是一个完整的 ABS 函数在 SQL 中使用的示例,其他内建函数(除窗口函数、聚合函数外)的使用方式与其类似,不再一一举例。

  1. select abs(id) from tbl1;
  2. -- tbl1表内id字段的绝对值

ACOS

函数声明

  1. Double acos(Double number)
  2. Decimal acos(Decimal number)

函数说明

该函数用于计算 number 的反余弦函数。

参数说明

number:Double 类型或 Decimal 类型,-1 ≤ number ≤1。若输入为 String 类型或 Bigint 类型,会隐式转换为 Double 类型后参与运算,其他类型抛异常。

返回值

返回 Double 类型或 Decimal 类型,值域在 0 ~ π 之间。若 number 为 null,返回 null。

示例如下

  1. acos("0.87") = 0.5155940062460905
  2. acos(0) = 1.5707963267948966

ASIN

函数声明

  1. Double asin(Double number)
  2. Decimal asin(Decimal number)

函数说明

该函数用于计算 number 的反正弦函数。

参数说明

number:Double 类型或 Decimal 类型,-1 ≤ number ≤1。若输入为 String 类型或 Bigint 类型,会隐式转换为 Double 类型后参与运算,其他类型抛异常。

返回值

返回 Double 类型或 Decimal 类型,值域在 -π/2 ~π/2 之间。若 number 为 null,返回 null。

示例如下

  1. asin(1) = 1.5707963267948966
  2. asin(-1) = -1.5707963267948966

ATAN

函数声明

  1. Double atan(Double number)

函数说明

该函数用于计算 number 的反正切函数。

参数说明

number:Double 类型,若输入为 String 类型或 Bigint 类型,会隐式转换到 Double 类型后参与运算,其他类型抛异常。

返回值

返回 Double 类型,值域在 -π/2 ~π/2 之间。若 number 为 null,返回 null。

示例如下

  1. atan(1) = 0.7853981633974483
  2. atan(-1) = -0.7853981633974483

CEIL

函数声明

  1. Bigint ceil(Double value)
  2. Bigint ceil(Decimal value)

函数说明

该函数返回不小于输入值 value 的最小整数。

参数说明

value:Double 类型或 Decimal 类型,若输入为 String 类型或 Bigint 类型,会隐式转换到 Double 类型后参与运算,其他类型抛异常。

返回值

返回 Bigint 类型。任意一个参数输入为 null,返回 null。

示例如下

  1. ceil(1.1) = 2
  2. ceil(-1.1) = -1

CONV

函数声明

  1. String conv(String input, Bigint from_base, Bigint to_base)

函数说明

该函数为进制转换函数。

参数说明

  • input:以 String 表示的要转换的整数值,接受 Bigint,Double 的隐式转换。

  • from_base,to_base:以十进制表示的进制的值,可接受的的值为 2,8,10,16。接受 String 及 Double 的隐式转换。

返回值

返回 String 类型。任意一个参数输入为 null,返回 null。转换过程以 64 位精度工作,溢出时报异常。输入如果是负值,即以”-“开头,报异常。如果输入的是小数,则会转为整数值后进行进制转换,小数部分会被舍弃。

示例如下

  1. conv('1100', 2, 10) = '12'
  2. conv('1100', 2, 16) = 'c'
  3. conv('ab', 16, 10) = '171'
  4. conv('ab', 16, 16) = 'ab'

COS

函数声明

  1. Double cos(Double number)
  2. Decimal cos(Decimal number)

函数说明

该函数用于计算 number 的余弦函数,输入为弧度值。

参数说明

number:Double 类型或 Decimal 类型。若输入为 String 类型或 Bigint 类型,会隐式转换到 Double 类型后参与运算,其他类型抛异常。

返回值

返回 Double 类型或 Decimal 类型。若 number 为 null,返回 null。

示例如下

  1. cos(3.1415926/2)=2.6794896585028633e-8
  2. cos(3.1415926)=-0.9999999999999986

COSH

函数声明

  1. Double cosh(Double number)
  2. Decimal cosh(Decimal number)

函数说明下

该函数用于计算 number 的双曲余弦函数。

参数说明

number:Double 类型或 Decimal 类型。若输入为 String 类型或 Bigint 类型,会隐式转换为 Double 类型后,参与运算,其他类型抛异常。

返回值

返回 Double 类型或 Decimal 类型。若 number 为 null,返回 null。

COT

函数声明

  1. Double cot(Double number)
  2. Decimal cot(Decimal number)

函数说明

该函数用于计算 number 的余切函数,输入为弧度值。

参数说明

number:Double 类型或 Decimal 类型。若输入为 String 类型或 Bigint 类型,会隐式转换为 Double 类型后参与运算,其他类型抛异常。

返回值

返回 Double 类型或 Decimal 类型。若 number 为 null,返回 null。

EXP

函数声明

  1. Double exp(Double number)
  2. Decimal exp(Decimal number)

函数说明

该函数用于计算 number 的指数函数。

返回值

返回 number 的指数值。

参数说明

number:Double 类型或 Decimal 类型。若输入为 String 类型或 Bigint 类型,会隐式转换为 Double 类型后参与运算,其他类型抛异常。

返回值

返回 Double 类型或 Decimal 类型。若 number 为 null,返回 null。

FLOOR

函数声明

  1. Bigint floor(Double number)
  2. Bigint floor(Decimal number)

函数说明

该函数用于向下取整。

返回值

返回比 number 小的整数值。

参数说明

number:Double 类型或 Decimal 类型,若输入为 String 类型或 Bigint 类型,会隐式转换为 Double 类型后参与运算,其他类型抛异常。

返回值

返回 Bigint 类型。若 number 为 null,返回 null。

示例如下

  1. floor(1.2)=1
  2. floor(1.9)=1
  3. floor(0.1)=0
  4. floor(-1.2)=-2
  5. floor(-0.1)=-1
  6. floor(0.0)=0
  7. floor(-0.0)=0

LN

函数声明

  1. Double ln(Double number)
  2. Decimal ln(Decimal number)

函数说明

该函数用于返回 number 的自然对数。

参数说明

number:Double 类型或 Decimal 类型,若输入为 String 类型或 Bigint 类型,会隐式转换为 Double 类型后参与运算,其他类型抛异常。若 number 为 null,返回 null。若 number 为负数或零,则执行报错。

返回值

返回 Double 类型或 Decimal 类型。

LOG

函数声明

  1. Double log(Double base, Double x)
  2. Decimal log(Decimal base, Decimal x)

函数说明

该函数用于返回以 base 为底的 x 的对数。

参数说明

  • base:Double 类型或 Decimal 类型,若输入为 String 类型或 Bigint 类型,会隐式转换为 Double 类型后参与运算,其他类型抛异常。

  • x:Double 类型或 Decimal 类型,若输入为 String 类型或 Bigint 类型,会隐式转换为 Double 类型后参与运算,其他类型抛异常。

返回值

返回 Double 类型或 Decimal 类型的对数值。

  • 若 base 和 x 中存在 null,则返回 null。

  • 若 base 和 x 中某一个值为负数或 0,会引发异常。

  • 若 base 为 1(会引发一个除零行为),也会引发异常。

POW

函数声明

  1. Double pow(Double x, Double y)
  2. Decimal pow(Decimal x, Decimal y)

函数声明

该函数用于返回 x 的 y 次方,即 x^y。

参数说明

  • X:Double 类型或 Decimal 类型,若输入为 String 类型或 Bigint 类型,会隐式转换为 Double 类型后参与运算,其他类型抛异常。

  • Y:Double类型或 Decimal 类型,若输入为 String 类型或 Bigint 类型,会隐式转换为 Double 类型后参与运算,其他类型抛异常。

返回值

返回 Double 类型或 Decimal 类型。若 x 或 y为 null,则返回 null。

RAND

函数声明

  1. Double rand(Bigint seed)

函数说明

该函数以 seed 为种子,返回 Double 类型的随机数,返回值区间是的 0~1。

参数说明

seed:可选参数,Bigint 类型,随机数种子,决定随机数序列的起始值。

返回值

返回 Double 类型。

示例如下

  1. select rand() from dual;
  2. select rand(1) from dual;

ROUND

函数声明

  1. Double round(Double number, [Bigint Decimal_places])
  2. Decimal round(Decimal number, [Bigint Decimal_places])

函数说明

该函数四舍五入到指定小数点位置。

参数说明

  • number:Double 类型或 Decimal 类型,若输入为 String 类型或 Bigint 类型,会隐式转换为 Double 类型后参与运算,其他类型抛异常。

  • Decimal_place:Bigint 类型常量,四舍五入计算到小数点后的位置,其他类型参数会引发异常. 如果省略表示四舍五入到个位数,默认值为 0。

返回值

返回 Double 类型或 Decimal 类型。若 number 或 Decimal_places 为 null,返回 null。

注意

Decimal_places 可以是负数。负数会从小数点向左开始计数,并且不保留小数部分。如果 Decimal_places 超过了整数部分长度,返回 0。

示例如下

  1. round(125.315) = 125.0
  2. round(125.315, 0) = 125.0
  3. round(125.315, 1) = 125.3
  4. round(125.315, 2) = 125.32
  5. round(125.315, 3) = 125.315
  6. round(-125.315, 2) = -125.32
  7. round(123.345, -2) = 100.0
  8. round(null) = null
  9. round(123.345, 4) = 123.345
  10. round(123.345, -4) = 0.0

SIN

函数声明

  1. Double sin(Double number)
  2. Decimal sin(Decimal number)

函数说明

该函数用于计算 number 的正弦函数,输入为弧度值。

参数说明

number:Double 类型或 Decimal 类型。若输入为 String 类型或 Bigint 类型,会隐式转换为 Double 类型后参与运算,其他类型抛异常。

返回值

返回 Double 类型或 Decimal 类型。若 number 为 null,返回 null。

SINH

函数声明

  1. Double sinh(Double number)
  2. Decimal sinh(Decimal number)

函数说明

该函数用于计算 number 的双曲正弦函数。

参数说明

number:Double 类型或 Decimal 类型。若输入为 String 类型或 Bigint 类型,会隐式转换为 Double 类型后参与运算,其他类型抛异常。

返回值

返回 Double 类型或 Decimal 类型。若 number 为 null,返回 null。

SQRT

函数声明

  1. Double sqrt(Double number)
  2. Decimal sqrt(Decimal number)

函数说明

该函数用于计算 number 的平方根。

参数说明

number:Double 类型或 Decimal 类型,必须大于 0。小于 0 时引发异常。若输入为 String 类型或 Bigint 类型,会隐式转换为 Double 类型后参与运算,其他类型抛异常。

返回值

返回 Double 类型或 Decimal 类型。若 number 为 null,返回 null。

TAN

函数声明

  1. Double tan(Double number)
  2. Decimal tan(Decimal number)

函数说明

该函数用于计算 number 的正切函数,输入为弧度值。

参数说明

number:Double 类型或 Decimal 类型。若输入为 String 类型或 Bigint 类型,会隐式转换为 Double 类型后参与运算,其他类型抛异常。

返回值

返回 Double 类型或 Decimal 类型。若 number 为 null,返回 null。

TANH

函数声明

  1. Double tanh(Double number)
  2. Decimal tanh(Decimal number)

函数说明

该函数用于计算 number 的双曲正切函数。

参数说明

number:Double 类型或 Decimal 类型。若输入为 String 类型或 Bigint 类型,会隐式转换为 Double 类型后参与运算,其他类型抛异常。

返回值

返回 Double 类型或 Decimal 类型。若 number 为 null,返回 null。

TRUNC

函数声明

  1. Double trunc(Double number[, Bigint Decimal_places])
  2. Decimal trunc(Decimal number[, Bigint Decimal_places])

函数说明

该函数用于将输入值 number 截取到指定小数点位置。

参数说明

  • number:Double 类型或 Decimal 类型,若输入为 String 类型或 Bigint 类型,会隐式转换为 Double 类型后参与运算,其他类型抛异常。

  • Decimal_places:Bigint 类型常量,要截取到的小数点位置,其他类型参数会隐式转为 Bigint,省略此参数时默认到截取到个位数。

返回值

返回值类型为 Double 或 Decimal 类型。若 number 或 Decimal_places 为 null,返回 null。

注意

  • 截取掉的部分补 0。

  • Decimal_places 可以是负数,负数会从小数点向左开始截取,并且不保留小数部分.如果 Decimal_places 超过了整数部分长度,返回 0。

示例如下

  1. trunc(125.815) = 125.0
  2. trunc(125.815, 0) =125.0
  3. trunc(125.815, 1) = 125.80000000000001
  4. trunc(125.815, 2) = 125.81
  5. trunc(125.815, 3) = 125.815
  6. trunc(-125.815, 2) = -125.81
  7. trunc(125.815, -1) = 120.0
  8. trunc(125.815, -2) = 100.0
  9. trunc(125.815, -3) = 0.0
  10. trunc(123.345, 4) = 123.345
  11. trunc(123.345, -4) = 0.0

新扩展数学函数

升级到 MaxCompute2.0 后,产品扩展部分数学函数,新函数若用到新数据类型时,在使用新函数的 SQL 前,需要加一个 set 语句:

  1. set odps.sql.type.system.odps2=true;

下文将为您详细介绍新扩展的函数。

LOG2

函数声明

  1. Double log2(Double number)
  2. Double log2(Decimal number)

函数说明

该函数用于以 2 为底,返回 number 的对数。

参数说明

number:Double 或 Decimal 类型。

返回值

返回 Double 类型。若输入为 0 或 null,返回 null。

示例如下

  1. log2(null)=null
  2. log2(0)=null
  3. log2(8)=3.0

LOG10

函数声明

  1. Double log10(Double number)
  2. Double log10(Decimal number)

函数说明

该函数用于以 10 为底,返回 number 的对数。

参数说明

number:Double 或 Decimal 类型。

返回值

返回 Double 类型。若输入为 0 或 null,返回 null。

示例如下

  1. log10(null)=null
  2. log10(0)=null
  3. log10(8)=0.9030899869919435

BIN

函数声明

  1. String bin(Bigint number)

函数说明

该函数用于返回 number 的二进制代码表示。

参数说明

number:Bigint 类型。

返回值

返回 String 类型。若输入为 0,返回 0,输入为 null,返回 null。

示例如下

  1. bin(0)='0'
  2. bin(null)='null'
  3. bin(12)='1100'

HEX

函数声明

  1. String hex(Bigint number)
  2. String hex(String number)
  3. String hex(BINARY number)

函数说明

该函数用于将整数或字符转换为十六进制格式。

参数说明

number:如果 number 是 Bigint 类型,那么返回 number 的十六进制表示。如果变量是 String 类型,则返回该字符串的十六进制表示。

返回值

返回 String 类型。若输入为 0,返回 0,输入为 null,返回异常。

示例如下

  1. hex(0)=0
  2. hex('abc')='616263'
  3. hex(17)='11'
  4. hex('17')='3137'
  5. hex(null)异常返回失败

UNHEX

函数声明

  1. BINARY unhex(String number)

函数说明

该函数用于返回十六进制字符串所代表的字符串。

使用该函数时,需要在 SQL 语句前加set odps.sql.type.system.odps2=true; 语句。

参数说明

number:为十六进制字符串。

返回值

返回 BINARY 类型,若输入 0,则返回失败,若输入为 null,返回 null。

示例如下

  1. unhex('616263')='abc'
  2. unhex(616263)='abc'

RADIANS

函数声明

  1. Double radians(Double number)

函数说明

该函数用于将角度转换为弧度。

参数说明

number:Double 类型数据。

返回值

返回 Double 类型,若输入为 null,返回 null。

示例如下

  1. radians(90)=1.5707963267948966
  2. radians(0)=0.0
  3. radians(null)=null

DEGREES

函数声明

  1. Double degrees(Double number)
  2. Double degrees(Decimal number)

函数说明

该函数用于将弧度转换为角度。

参数说明

number:Double 或 Decimal 类型数据。

返回值

返回 Double 类型,若输入 null,则返回 null。

示例如下

  1. degrees(1.5707963267948966)=90.0
  2. degrees(0)=0.0
  3. degrees(null)=null

SIGN

函数声明

  1. Double sign(Double number)
  2. Double sign(Decimal number)

函数说明

该函数用于取输入数据的符号,’1.0’表示正,’-1.0’表示负,否则’0.0’。

参数说明

number:Double 或 Decimal 类型数据。

返回值

返回 Double 类型,若输入 0,则返回0.0,输入为 null,则返回 null。

示例如下

  1. sign(-2.5)=-1.0
  2. sign(2.5)=1.0
  3. sign(0)=0.0
  4. sign(null)=null

E

函数声明

  1. Double e()

函数说明

该函数用于返回 e 的值。

返回值

返回 Double 类型。

示例如下

  1. e()=2.718281828459045

PI

函数声明

  1. Double pi()

函数说明

该函数用于返回 π 的值。

返回值

返回 Double 类型。

示例如下

  1. pi()=3.141592653589793

FACTORIAL

函数声明

  1. Bigint factorial(Int number)

函数说明

该函数用于返回 number 的阶乘。

参数说明

number:Int 类型数据,且在 [0..20] 之间。

返回值

返回 Bigint 类型,输入为 0,则返回 1,输入为 null 或 [0..20] 之外的值,返回 null。

示例如下

  1. factorial(5)=120 --5!= 5*4*3*2*1=120

CBRT

函数声明

  1. Double cbrt(Double number)

函数说明

该函数用于计算 number 的立方根。

参数说明

number:Double 类型数据。

返回值

返回 Double 类型,输入为 null,返回 null。

示例如下

  1. cbrt(8)=2
  2. cbrt(null)=null

SHIFTLEFT

函数声明

  1. Int shiftleft(Tinyint|Smallint|Int number1, Int number2)
  2. Bigint shiftleft(Bigint number1, Int number2)

函数说明

该函数用于按位左移(<<)。

参数说明

  • number1:Tinyint|Smallint|Int|Bigint 整型数据。

  • number2:Int 整型数据。

返回值

返回 Int 或 Bingint 类型。

示例如下

  1. shiftleft(1,2)=4 --1的二进制左移2位(1<<2,0001左移两位是0100
  2. shiftleft(4,3)=32--4的二进制左移3位(4<<3,0100左移3位是100000

SHIFTRIGHT

函数声明

  1. Int shiftright(Tinyint|Smallint|Int number1, Int number2)
  2. Bigint shiftright(Bigint number1, Int number2)

函数说明

该函数用于按位右移(>>)。

参数说明

  • number1:Tinyint|Smallint|Int|Bigint 整型数据。

  • number2:Int 整型数据。

返回值

返回 Int 或 Bigint 类型。

示例如下

  1. shiftright(4,2)=1 -- 4的二进制右移2位(4>>2,0100右移两位是0001
  2. shiftright(32,3)=4 -- 32的二进制右移3位(32>>3,100000右移3位是0100

SHIFTRIGHTUNSIGNED

函数声明

  1. Int shiftrightunsigned(Tinyint|Smallint|Int number1, Int number2)
  2. Bigint shiftrightunsigned(Bigint number1, Int number2)

函数说明

该函数用于无符号按位右移(>>>)。

参数说明

  • number1:Tinyint|Smallint|Int|Bigint 整型数据。

  • number2:Int 整型数据。

返回值

返回 Int 或 Bigint 类型。

示例如下

  1. shiftrightunsigned(8,2)=2 --8的二进制无符号右移2位(8>>>2,1000右移两位是0010)
  2. shiftrightunsigned(-14,2)=1073741820-- -14的二进制右移2位(-14>>>2, 11111111 11111111 11111111 11110010右移2位是 00111111 11111111 11111111 11111100)
本文导读目录