MaxCompute SQL提供了常见的数学函数供您在开发过程中使用,您可以根据实际需要选择合适的数学函数,进行数据计算、数据转换相关操作。本文为您提供MaxCompute SQL支持的数学函数的命令格式、参数说明及示例,指导您使用数学函数完成开发。

MaxCompute SQL支持的数学函数如下。
函数 功能
ABS 计算绝对值。
ACOS 计算反余弦值。
ASIN 计算反正弦值。
ATAN 计算反正切值。
CEIL 计算向上取整值。
CONV 计算进制转换值。
COS 计算余弦值。
COSH 计算双曲余弦值。
COT 计算余切值。
EXP 计算指数值。
FLOOR 计算向下取整值。
LN 计算自然对数。
LOG 计算log对数值。
POW 计算幂值。
RAND 返回随机数。
ROUND 返回四舍五入到指定小数点位置的值。
SIN 计算正弦值。
SINH 计算双曲正弦值。
SQRT 计算平方根。
TAN 计算正切值。
TANH 计算双曲正切值。
TRUNC 返回截取到指定小数点位置的值。
BIN 计算二进制代码值。
CBRT 计算立方根值。
CORR 计算皮尔逊系数。
DEGREES 将弧度转换为角度。
E 返回e的值。
FACTORIAL 计算阶乘值。
FORMAT_NUMBER 将数字转化为指定格式的字符串。
HEX 返回整数或字符串的十六进制格式。
LOG2 计算以2为底的对数。
LOG10 计算以10为底的对数。
PI 返回π的值。
RADIANS 将角度转换为弧度。
SIGN 返回输入参数的符号。
SHIFTLEFT 计算按位左移值。
SHIFTRIGHT 计算按位右移值。
SHIFTRIGHTUNSIGNED 计算无符号按位右移值。
UNHEX 返回十六进制字符串所代表的字符串。
WIDTH_BUCKET 返回指定字段值落入的分组编号。

ABS

  • 命令格式
    double abs(double <number>)
    bigint abs(bigint <number>)
    decimal abs(decimal <number>)
  • 命令说明

    计算number的绝对值。

  • 参数说明
    number:必填。
    说明 当输入BIGINT类型的值超过BIGINT的最大表示范围时,会返回DOUBLE类型,但可能会损失精度。
  • 返回值说明
    返回值类型取决于输入参数的类型。当number为DOUBLE、BIGINT或DECIMAL类型时会返回相应的类型。
    • 输入为BIGINT,则返回BIGINT类型。
    • 输入为DOUBLE,则返回DOUBLE类型。
    • 输入为DECIMAL,则返回DECIMAL类型。
    • 输入为STRING,则隐式转换为DOUBLE类型后参与运算。
    • 输入为NULL,则返回NULL。
    • 输入非以上5种类型,则返回报错。
  • 示例
    --返回NULL。
    select abs(null);
    --返回1。
    select abs(-1);
    --返回1.2。
    select abs(-1.2);
    --返回2.0。
    select abs("-2");
    --返回1.2232083745629837E32。
    select abs(122320837456298376592387456923748);
    --取tbl1表内id字段的绝对值。下面是一个完整的ABS函数在SQL中使用的示例,其他内建函数(除窗口函数和聚合函数外)的使用方式与其类似。
    select abs(id) from tbl1;

ACOS

  • 命令格式
    double acos(double <number>)
    decimal acos(decimal <number>)
  • 命令说明

    计算number的反余弦函数。

  • 参数说明

    number:必填。DOUBLE类型或DECIMAL类型,取值范围为[-1,1]。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE类型或DECIMAL类型,值域在0~π之间。返回规则如下:
    • number非DOUBLE、DECIMAL、STRING或BIGINT类型时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回0.5155940062460905。
    select acos("0.87");
    --返回1.5707963267948966。
    select acos(0);
    --返回NULL。
    select acos(null);

ASIN

  • 命令格式
    double asin(double <number>)
    decimal asin(decimal <number>)
  • 命令说明

    计算number的反正弦函数。

  • 参数说明

    number:必填。DOUBLE类型或DECIMAL类型,取值范围为[-1,1]。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE类型或DECIMAL类型,值域在-π/2~π/2之间。返回规则如下:
    • number非DOUBLE、DECIMAL、STRING或BIGINT类型时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回1.5707963267948966。
    select asin(1);
    --返回-1.5707963267948966。
    select asin(-1);
    --返回NULL。
    select asin(null);

ATAN

  • 命令格式
    double atan(double <number>)
  • 命令说明

    计算number的反正切函数。

  • 参数说明

    number:必填。DOUBLE类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE类型,值域在-π/2~π/2之间。返回规则如下:
    • number非DOUBLE、STRING或BIGINT类型时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回0.7853981633974483。
    select atan(1);
    --返回-0.7853981633974483。
    select atan(-1);
    --返回NULL。
    select atan(null);

CEIL

  • 命令格式
    bigint ceil(double <value>)
    bigint ceil(decimal <value>)
  • 命令说明

    向上取整,返回不小于输入值value的最小整数。

  • 参数说明

    value:必填。DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回BIGINT类型。返回规则如下:
    • number非DOUBLE、DECIMAL、STRING或BIGINT类型时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回2。
    select ceil(1.1);
    --返回-1。
    select ceil(-1.1);
    --返回NULL。
    select ceil(null);

CONV

  • 命令格式
    string conv(string <input>, bigint <from_base>, bigint <to_base>)
  • 命令说明

    该函数为进制转换函数。

  • 参数说明
    • input:必填。以STRING表示的要转换的整数值,支持BIGINT和DOUBLE的隐式转换。
    • from_baseto_base:必填。以十进制表示的进制值,支持的值为2、8、10和16。支持STRING及DOUBLE类型的隐式转换。
  • 返回值说明
    返回STRING类型。返回规则如下:
    • inputfrom_baseto_base值为NULL时,返回NULL。
    • 转换过程以64位精度工作,溢出时返回报错。
    • input如果是负值,即以短划线(-)开头,返回报错。如果输入的是小数,会转为整数值后进行进制转换,小数部分会被舍弃。
  • 示例
    --返回12。
    select conv('1100', 2, 10);
    --返回C。
    select conv('1100', 2, 16);
    --返回171。
    select conv('ab', 16, 10);
    --返回AB。
    select conv('ab', 16, 16);
    --返回NULL。
    select conv('1100', null, 10);

COS

  • 命令格式
    double cos(double <number>)
    decimal cos(decimal <number>)
  • 命令说明

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

  • 参数说明

    number:必填。DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE类型或DECIMAL类型。返回规则如下:
    • number非DOUBLE、DECIMAL、STRING或BIGINT类型时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回2.6794896585028633e-8。
    select cos(3.1415926/2);
    --返回-0.9999999999999986。
    select cos(3.1415926);
    --返回NULL。
    select cos(null);

COSH

  • 命令格式
    double cosh(double <number>)
    decimal cosh(decimal <number>)
  • 命令说明

    计算number的双曲余弦函数。

  • 参数说明

    number:必填。DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE类型或DECIMAL类型。返回规则如下:
    • number非DOUBLE、DECIMAL、STRING或BIGINT类型时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回2.5091784169949913。
    select cosh(3.1415926/2);
    --返回NULL。
    select cosh(null);

COT

  • 命令格式
    double cot(double <number>)
    decimal cot(decimal <number>)
  • 命令说明

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

  • 参数说明

    number:必填。DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE类型或DECIMAL类型。返回规则如下:
    • number非DOUBLE、DECIMAL、STRING或BIGINT类型时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回2.6794896585028643E-8。
    select cot(3.1415926/2);
    --返回NULL。
    select cot(null);

EXP

  • 命令格式
    double exp(double <number>)
    decimal exp(decimal <number>)
  • 命令说明

    计算number的指数函数。

  • 参数说明

    number:必填。DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE类型或DECIMAL类型。返回规则如下:
    • number非DOUBLE、DECIMAL、STRING或BIGINT类型时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回4.810477252069109。
    select exp(3.1415926/2);
    --返回NULL。
    select exp(null);

FLOOR

  • 命令格式
    bigint floor(double <number>)
    bigint floor(decimal <number>)
  • 命令说明

    向下取整,返回不大于number的最大整数值。

  • 参数说明

    number:必填。DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回BIGINT类型。返回规则如下:
    • number非DOUBLE、DECIMAL、STRING或BIGINT类型时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回1。
    select floor(1.2);
    --返回0。
    select floor(0.1);
    --返回-2。
    select floor(-1.2);
    --返回-1。
    select floor(-0.1);
    --返回0。
    select floor(0.0);
    --返回0。
    select floor(-0.0);
    --返回NULL。
    select floor(null);

LN

  • 命令格式
    double ln(double <number>)
    decimal ln(decimal <number>)
  • 命令说明

    计算number的自然对数。

  • 参数说明

    number:必填。DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE类型或DECIMAL类型。返回规则如下:
    • number非DOUBLE、DECIMAL、STRING或BIGINT类型时,返回报错。
    • number值为负数或0时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回1.144729868791239。
    select ln(3.1415926);
    --返回NULL。
    select ln(null);

LOG

  • 命令格式
    double log(double <base>, double <x>)
    double log(decimal <base>, decimal <x>)
  • 命令说明

    计算以base为底的x的对数。

  • 参数说明
    • base:必填。DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。
    • x:必填。DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。
  • 返回值说明
    返回DOUBLE类型的对数值。 返回规则如下:
    • basex值为NULL时,返回NULL。
    • basex值为负数或0时,返回报错。
    • 如果base为1(会引发一个除零行为),也会返回报错。
  • 示例
    --返回4.0。
    select log(2, 16);
    --返回NULL。
    select log(2, null);

POW

  • 命令格式
    double pow(double <x>, double <y>)
    decimal pow(decimal <x>, decimal <y>)
  • 命令说明

    计算xy次方,即x^y

  • 参数说明
    • x:必填。DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。
    • y:必填。DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。
  • 返回值说明

    返回DOUBLE类型或DECIMAL类型。xy值为NULL时,返回NULL。

  • 示例
    --返回65536.0。
    select pow(2, 16);
    --返回NULL。
    select pow(2, null);

RAND

  • 命令格式
    double rand(bigint <seed>)
  • 命令说明

    返回DOUBLE类型的随机数,返回值区间是0~1。

  • 参数说明

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

    说明 您可以通过seed确定随机数序列,seed确定后,即可固定该函数的返回结果。
  • 返回值说明

    返回DOUBLE类型。

  • 示例
    --返回4.7147460303803655E-4。
    select rand();
    --返回0.7308781907032909。
    select rand(1);

ROUND

  • 命令格式
    double round(double <number>[, bigint <decimal_places>])
    decimal round(decimal <number>[, bigint <decimal_places>])
  • 命令说明

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

  • 参数说明
    • number:必填。DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。
    • decimal_places:可选。BIGINT类型常量,四舍五入计算到小数点后的位置。如果省略表示四舍五入到个位数,默认值为0。
      说明 decimal_places可以是负数。负数会从小数点向左开始计数,并且不保留小数部分。如果decimal_places超过了整数部分长度,返回0。
  • 返回值说明
    返回DOUBLE类型或DECIMAL类型。返回规则如下:
    • number非DOUBLE、DECIMAL、STRING或BIGINT类型时,返回报错。
    • decimal_places非BIGINT类型时,返回报错。
    • numberdecimal_places值为NULL时,返回NULL。
  • 示例
    --返回125.0。
    select round(125.315);
    --返回125.3。
    select round(125.315, 1);
    --返回125.32。
    select round(125.315, 2);
    --返回125.315。
    select round(125.315, 3);
    --返回-125.32。
    select round(-125.315, 2);
    --返回100.0。
    select round(123.345, -2);
    --返回NULL。
    select round(null);
    --返回123.345。
    select round(123.345, 4);
    --返回0.0。
    select round(123.345, -4);

SIN

  • 命令格式
    double sin(double <number>)
    decimal sin(decimal <number>)
  • 命令说明

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

  • 参数说明

    number:必填。DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE类型或DECIMAL类型。返回规则如下:
    • number非DOUBLE、DECIMAL、STRING或BIGINT类型时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回-0.3048106211022167。
    select sin(60);
    --返回NULL。
    select sin(null);

SINH

  • 命令格式
    double sinh(double <number>)
    decimal sinh(decimal <number>)
  • 命令说明

    计算number的双曲正弦函数。

  • 参数说明

    number:必填。DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE类型或DECIMAL类型。返回规则如下:
    • number非DOUBLE、DECIMAL、STRING或BIGINT类型时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回5.343237290762231E12。
    select sinh(30);
    --返回NULL。
    select sinh(null);

SQRT

  • 命令格式
    double sqrt(double <number>)
    decimal sqrt(decimal <number>)
  • 命令说明

    计算number的平方根。

  • 参数说明

    number:必填。DOUBLE类型或DECIMAL类型,必须大于0,小于0时返回异常。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE类型或DECIMAL类型。返回规则如下:
    • number非DOUBLE、DECIMAL、STRING或BIGINT类型时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回2.0。
    select sqrt(4);
    --返回NULL。
    select sqrt(null);

TAN

  • 命令格式
    double tan(double <number>)
    decimal tan(decimal <number>)
  • 命令说明

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

  • 参数说明

    number:必填。DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE类型或DECIMAL类型。返回规则如下:
    • number非DOUBLE、DECIMAL、STRING或BIGINT类型时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回-6.405331196646276。
    select tan(30);
    --返回NULL。
    select tan(null);

TANH

  • 命令格式
    double tanh(double <number>)
    decimal tanh(decimal <number>)
  • 命令说明

    计算number的双曲正切函数。

  • 参数说明

    number:必填。DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE类型或DECIMAL类型。返回规则如下:
    • number非DOUBLE、DECIMAL、STRING或BIGINT类型时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回1.0。
    select tanh(30);
    --返回NULL。
    select tanh(null);

TRUNC

  • 命令格式
    double trunc(double <number>[, bigint <decimal_places>])
    decimal trunc(decimal <number>[, bigint <decimal_places>])
  • 命令说明
    将输入值number截取到指定小数点位置。
    说明 Hive兼容模式下,该函数不再是数学函数,而用于实现日期转换,对应日期函数请参见DATETRUNC。请根据实际情况设置MaxCompute项目的数据类型版本,更多数据类型版本信息,请参见数据类型版本说明
  • 参数说明
    • number:必填。DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。
    • decimal_places:可选。BIGINT类型常量,要截取到的小数点位置。省略此参数时默认截取到个位数。decimal_places可以是负数,负数会从小数点向左开始截取,并且不保留小数部分。如果decimal_places超过了整数部分长度,则返回0。
  • 返回值说明
    返回值类型为DOUBLE或DECIMAL类型。返回规则如下:
    • number非DOUBLE、DECIMAL、STRING或BIGINT类型时,返回报错。
    • decimal_places非BIGINT类型时,返回报错。
    • numberdecimal_places值为NULL时,返回NULL。
    说明
    • 返回DOUBLE类型时,返回的结果显示可能不符合预期,例如trunc(125.815,1),这个DOUBLE类型显示问题任何系统都存在。
    • 截取掉的部分补0。
  • 示例
    --返回125.0。
    select trunc(125.815,0);
    --返回125.80000000000001。
    select trunc(125.815,1);
    --返回125.81。
    select trunc(125.815,2);
    --返回125.815。
    select trunc(125.815,3);
    --返回-125.81。
    select trunc(-125.815,2);
    --返回120.0。
    select trunc(125.815,-1);
    --返回100.0。
    select trunc(125.815,-2);
    --返回0.0。
    select trunc(125.815,-3);
    --返回123.345。
    select trunc(123.345,4);
    --返回0.0。
    select trunc(123.345,-4);
    --返回NULL。
    select trunc(123.345,null);

MaxCompute 2.0扩展函数

升级到MaxCompute 2.0后,产品扩展了部分函数。如果您用到的函数涉及新数据类型(TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP或BINARY),在使用扩展函数时,需要执行如下语句开启新数据类型开关:
  • Session级别:如果使用新数据类型,您需要在SQL语句前加上语句set odps.sql.type.system.odps2=true;,并与SQL语句一起提交执行。
  • Project级别:Project Owner可根据需要对Project进行设置,等待10~15分钟后才会生效。命令如下。
    setproject odps.sql.type.system.odps2=true;
    setproject的详细说明请参见项目空间操作。关于开启Project级别数据类型的注意事项,请参见数据类型版本说明

BIN

  • 命令格式
    string bin(bigint <number>)
  • 命令说明

    返回number的二进制代码表示。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    number:必填。BIGINT类型。

  • 返回值说明
    返回STRING类型。返回规则如下:
    • number非BIGINT类型时,返回报错。
    • number值为0时,返回0。
    • number值为NULL时,返回NULL。
  • 示例
    --返回0。
    select bin(0);
    --返回NULL。
    select bin(null);
    --返回1100。
    select bin(12);

CBRT

  • 命令格式
    double cbrt(double <number>)
  • 命令说明

    计算number的立方根。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    number:必填。DOUBLE类型数据。

  • 返回值说明
    返回DOUBLE类型。返回规则如下:
    • number非DOUBLE类型时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回2.0。
    select cbrt(8);
    --返回NULL。
    select cbrt(null);

CORR

  • 命令格式
    double corr(<col1>, <col2>)
  • 命令说明

    计算两列数据的皮尔逊系数(Pearson Correlation Coefficien)。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    col1col2:必填。待计算皮尔逊系数的表的两个列名称。DOUBLE、BIGINT、INT、SMALLINT、TINYINT、DECIMAL类型。col1col2的数据类型可以不相同。

  • 返回值说明

    返回DOUBLE类型。如果某一输入列的某一行存在NULL值,该行不参与计算。

  • 示例
    假设表table有a、b两列,数据类型分别为INT、DOUBLE。表中数据如下。
    +------------+------------+
    | a          | b          |
    +------------+------------+
    | 2          | 0.25       |
    | 1          | 0.5        |
    | 1          | NULL       |
    +------------+------------+
    计算a、b两列的皮尔逊系数,命令示例如下。
    --返回-0.9999999999999999。
    select corr(a, b) from table;

DEGREES

  • 命令格式
    double degrees(double <number>) 
    double degrees(decimal <number>)
  • 命令说明

    将弧度转换为角度。

  • 参数说明

    number:必填。DOUBLE或DECIMAL类型数据。此函数为MaxCompute 2.0扩展函数。

  • 返回值说明
    返回DOUBLE类型。返回规则如下:
    • number非DOUBLE或DECIMAL类型时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回90.0。
    select degrees(1.5707963267948966);
    --返回0.0。
    select degrees(0);
    --返回NULL。
    select degrees(null);

E

  • 命令格式
    double e()
  • 命令说明

    返回e的值。此函数为MaxCompute 2.0扩展函数。

  • 返回值说明

    返回DOUBLE类型。

  • 示例
    --返回2.718281828459045。
    select e();

FACTORIAL

  • 命令格式
    bigint factorial(int <number>)
  • 命令说明

    返回number的阶乘。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    number:必填。INT类型数据,且在[0,20]之间。

  • 返回值说明
    返回BIGINT类型。返回规则如下:
    • number值为0时,返回1。
    • number值为NULL或[0,20]之外的值,返回NULL。
  • 示例
    --返回120。5!=5*4*3*2*1=120
    select factorial(5); 
    --返回1。
    select factorial(0); 
    --返回NULL。
    select factorial(null);

FORMAT_NUMBER

  • 命令格式
    string format_number(float|double|decimal <expr1>, <expr2>)
  • 命令说明

    将数字转化为指定格式的字符串。此函数为MaxCompute 2.0扩展函数。

  • 参数说明
    • expr1:必填。需要格式化的数据。
    • expr2:必填。需要转化的目标格式。可以为INT类型,指定需要保留小数位数。也可以为类似#,###,###.##格式描述。
  • 返回值说明
    返回STRING类型数据。返回规则如下:
    • 如果expr2>0,则四舍五入到小数点后指定位数。
    • 如果expr2=0,则没有小数点或小数部分。
    • 如果expr2<0,或者expr2>340,则返回报错。
    • expr1expr2值为NULL时,返回NULL。
  • 示例
    --返回5.230。
    select format_number(5.230134523424545456,3);
    --返回12,332.123。
    select format_number(12332.123456, '#,###,###,###.###');
    --返回NULL。
    select format_number(null,3);

HEX

  • 命令格式
    string hex(bigint <number>) 
    string hex(string <number>)
    string hex(binary <number>)
  • 命令说明

    将整数或字符串转换为十六进制格式。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    number:必填。如果number是BIGINT类型,那么返回number的十六进制表示。如果number是STRING类型,则返回该字符串的十六进制表示。

  • 返回值说明

    返回STRING类型。返回规则如下:

    • number值非0或非NULL时,返回STRING类型。
    • number值为0时,返回0。
    • number值为NULL时,返回报错。
  • 示例
    --返回0。
    select hex(0);
    --返回616263。
    select hex('abc');
    --返回11。
    select hex(17);
    --返回3137。
    select hex('17');
    --返回报错。 
    select hex(null);

LOG2

  • 命令格式
    double log2(double <number>)
    double log2(decimal <number>)
  • 命令说明

    返回以2为底,number的对数。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    number:必填。DOUBLE或DECIMAL类型。

  • 返回值说明
    返回DOUBLE类型。返回规则如下:
    • number非DOUBLE或DECIMAL类型时,返回NULL。
    • number值为0或NULL时,返回NULL。
  • 示例
    --返回NULL。
    select log2(null);
    --返回NULL。
    select log2(0);
    --返回3.0。
    select log2(8);

LOG10

  • 命令格式
    double log10(double <number>)
    double log10(decimal <number>)
  • 命令说明

    返回以10为底,number的对数。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    number:必填。DOUBLE或DECIMAL类型。

  • 返回值说明
    返回DOUBLE类型。返回规则如下:
    • number非DOUBLE或DECIMAL类型时,返回NULL。
    • number值为0或NULL时,返回NULL。
  • 示例
    --返回NULL。
    select log10(null);
    --返回NULL。
    select log10(0);
    --返回0.9030899869919435。
    select log10(8);

PI

  • 命令格式
    double pi()
  • 命令说明

    返回π的值。此函数为MaxCompute 2.0扩展函数。

  • 返回值说明

    返回DOUBLE类型。

  • 示例
    --返回3.141592653589793。
    select pi();

RADIANS

  • 命令格式
    double radians(double <number>)
  • 命令说明

    将角度转换为弧度。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    number:必填。DOUBLE类型数据。

  • 返回值说明
    返回DOUBLE类型。返回规则如下:
    • number非DOUBLE类型时,返回NULL。
    • number值为NULL时,返回NULL。
  • 示例
    --返回1.5707963267948966。
    select radians(90);
    --返回0.0。
    select radians(0);
    --返回NULL。
    select radians(null);

SIGN

  • 命令格式
    double sign(double <number>)
    double sign(decimal <number>)
  • 命令说明

    获取输入参数的符号。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    number:必填。DOUBLE或DECIMAL类型数据。

  • 返回值说明
    返回DOUBLE类型。返回规则如下:
    • number值为正数时,返回1.0。
    • number值为负数时,返回-1.0。
    • number值为0时,返回0.0。
    • number值为NULL时,返回NULL。
  • 示例
    --返回-1.0。
    select sign(-2.5);
    --返回1.0。
    select sign(2.5);
    --返回0.0。
    select sign(0);
    --返回NULL。
    select sign(null);

SHIFTLEFT

  • 命令格式
    int shiftleft(tinyint|smallint|int <number1>, int <number2>)
    bigint shiftleft(bigint <number1>, int <number2>)
  • 命令说明

    按位左移(<<)。此函数为MaxCompute 2.0扩展函数。

  • 参数说明
    • number1:必填。TINYINT、SMALLINT、INT或BIGINT整型数据。
    • number2:必填。INT整型数据。
  • 返回值说明
    返回INT或BIGINT类型。返回规则如下
    • number1非TINYINT、SMALLINT、INT或BIGINT类型时,返回报错。
    • number2非INT类型时,返回报错。
    • number1number2值为NULL时,返回NULL。
  • 示例
    --返回4。1的二进制左移2位(1<<2,0001左移两位是0100)。
    select shiftleft(1,2); 
    --返回32。4的二进制左移3位(4<<3,0100左移3位是100000)。
    select shiftleft(4,3);
    --返回NULL。
    select shiftleft(null,2);

SHIFTRIGHT

  • 命令格式
    int shiftright(tinyint|smallint|int <number1>, int <number2>)
    bigint shiftright(bigint <number1>, int <number2>)
  • 命令说明

    按位右移(>>)。此函数为MaxCompute 2.0扩展函数。

  • 参数说明
    • number1:必填。TINYINT、SMALLINT、INT或BIGINT整型数据。
    • number2:必填。INT整型数据。
  • 返回值说明
    返回INT或BIGINT类型。返回规则如下:
    • number1非TINYINT、SMALLINT、INT或BIGINT类型时,返回报错。
    • number2非INT类型时,返回报错。
    • number1number2值为NULL时,返回NULL。
  • 示例
    --返回1。4的二进制右移2位(4>>2,0100右移两位是0001)。
    select shiftright(4,2);
    --返回4。32的二进制右移3位(32>>3,100000右移3位是0100)。
    select shiftright(32,3);
    --返回NULL。
    select shiftright(null,3);

SHIFTRIGHTUNSIGNED

  • 命令格式
    int shiftrightunsigned(tinyint|smallint|int <number1>, int <number2>)
    bigint shiftrightunsigned(bigint <number1>, int <number2>)
  • 命令说明

    无符号按位右移(>>>)。此函数为MaxCompute 2.0扩展函数。

  • 参数说明
    • number1:必填。TINYINT、SMALLINT、INT或BIGINT整型数据。
    • number2:必填。INT整型数据。
  • 返回值说明
    返回INT或BIGINT类型。返回规则如下:
    • number1非TINYINT、SMALLINT、INT或BIGINT类型时,返回报错。
    • number2非INT类型时,返回报错。
    • number1number2值为NULL时,返回NULL。
  • 示例
    --返回2。8的二进制无符号右移2位(8>>>2,1000右移两位是0010)。
    select shiftrightunsigned(8,2);
    --返回1073741820。-14的二进制右移2位(-14>>>2, 11111111 11111111 11111111 11110010右移2位是00111111 11111111 11111111 11111100)。
    select shiftrightunsigned(-14,2);
    --返回NULL。
    select shiftrightunsigned(-14,null);

UNHEX

  • 命令格式
    binary unhex(string <number>)
  • 命令说明

    返回十六进制字符串所代表的字符串。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    number:必填。为十六进制字符串。

  • 返回值说明
    返回BINARY类型。返回规则如下:
    • number值为0时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回abc。
    select unhex('616263');
    --返回abc。
    select unhex(616263);
    --返回NULL。
    select unhex(null);

WIDTH_BUCKET

  • 命令格式
    width_bucket(numeric <expr>, numeric <min_value>, numeric <max_value>, int <num_buckets>)
  • 命令说明

    设定分组范围的最小值、最大值和分组个数,构建指定个数的大小相同的分组,返回指定字段值落入的分组编号。支持的数据类型为BIGINT、INT、FLOAT、DOUBLE、DECIMAL以及数据类型2.0的DECIMAL(precision,scale),详情请参见2.0数据类型版本。此函数为MaxCompute 2.0扩展函数。

  • 参数说明
    • expr:必填。需要判断分组编号的字段。
    • min_value:必填。分组范围最小值。
    • max_value:必填。分组范围最大值,最大值必须比最小值大。
    • num_buckets:必填。分组个数,必须大于0。
  • 返回值说明
    返回值为BIGINT类型,范围为0到设定的分组个数+1。返回规则如下:
    • expr值小于min_value时,返回0。
    • expr大于max_value时,返回设定的分组个数+1。
    • expr值为NULL时,分组编号返回值也为NULL。其他情况返回字段值落入的分组编号。字段值对应的分组编号取值规则为floor( num_buckets * (expr - min_value)/(max_value - min_value) + 1)
    • min_valuemax_valuenum_buckets值为NULL时,返回NULL。
  • 示例
    • 示例1:入参无NULL。命令示例如下。
      select key,value,width_bucket(value,100,500,5) as value_group
      from values 
          (1,99),
          (2,100),
          (3,199),
          (4,200),
          (5,499),
          (6,500),
          (7,501),
          (8,NULL)
      as t(key,value);
      返回结果如下。
      +-------+--------+-------------+
      | key   | value  | value_group |
      +-------+--------+-------------+
      | 1     | 99     | 0           |
      | 2     | 100    | 1           |
      | 3     | 199    | 2           |
      | 4     | 200    | 2           |
      | 5     | 499    | 5           |
      | 6     | 500    | 6           |
      | 7     | 501    | 6           |
      | 8     | \N     | \N          |
      +-------+--------+-------------+
    • 示例2:入参存在NULL。命令示例如下。
      select key,value,width_bucket(value,100,500,null) as value_group
      from values
          (1,99),
          (2,100),
          (3,199),
          (4,200),
          (5,499),
          (6,500),
          (7,501),
          (8,NULL)
      as t(key,value);
      返回结果如下。
      +------+-------+-------------+
      | key  | value | value_group |
      +------+-------+-------------+
      | 1    | 99    | NULL        |
      | 2    | 100   | NULL        |
      | 3    | 199   | NULL        |
      | 4    | 200   | NULL        |
      | 5    | 499   | NULL        |
      | 6    | 500   | NULL        |
      | 7    | 501   | NULL        |
      | 8    | NULL  | NULL        |
      +------+-------+-------------+