开发者社区> 问答> 正文

MaxCompute用户指南:SQL:内建函数:数学函数



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)

展开
收起
行者武松 2017-10-23 17:27:44 3746 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
大数据AI一体化的解读 立即下载
极氪大数据 Serverless 应用实践 立即下载
大数据&AI实战派 第2期 立即下载