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 返回截取到指定小数点位置的值。
LOG2 计算以2为底的对数。
LOG10 计算以10为底的对数。
BIN 计算二进制代码值。
HEX 返回整数或字符串的十六进制格式。
UNHEX 返回十六进制字符串所代表的字符串。
RADIANS 将角度转换为弧度。
DEGREES 将弧度转换为角度。
SIGN 返回输入参数的符号。
E 返回e的值。
PI 返回π的值。
FACTORIAL 计算阶乘值。
CBRT 计算立方根值。
SHIFTLEFT 计算按位左移值。
SHIFTRIGHT 计算按位右移值。
SHIFTRIGHTUNSIGNED 计算无符号按位右移值。
FORMAT_NUMBER 将数字转化为指定格式的字符串。
WIDTH_BUCKET 返回指定字段值落入的分组编号。

ABS

  • 命令格式
    DOUBLE ABS(DOUBLE number)
    BIGINT ABS(BIGINT number)
    DECIMAL ABS(DECIMAL number)
  • 命令说明

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

  • 参数说明
    number:当number为DOUBLE、BIGINT或DECIMAL类型时会返回相应的类型。
    • 输入为BIGINT,则返回BIGINT类型。
    • 输入为DOUBLE,则返回DOUBLE类型。
    • 输入为DECIMAL,则返回DECIMAL类型。
    • 输入为STRING,则隐式转换为DOUBLE类型后参与运算。
    • 输入非以上4种类型,则返回异常。
    说明 当输入BIGINT类型的值超过BIGINT的最大表示范围时,会返回DOUBLE类型,但可能会损失精度。
  • 返回值

    返回值类型取决于输入参数的类型,包含DOUBLE、BIGINT或DECIMAL类型。如果输入参数为NULL,则返回NULL。

  • 示例
    ABS(null)=null
    ABS(-1)=1
    ABS(-1.2)=1.2
    ABS("-2")=2.0
    ABS(122320837456298376592387456923748)=1.2232083745629837e32
    下面是一个完整的ABS函数在SQL中使用的示例,其他内建函数(除窗口函数和聚合函数外)的使用方式与其类似。
    //取tbl1表内id字段的绝对值。
    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~π之间。如果输入参数为NULL,则返回NULL。

  • 示例
    ACOS("0.87")=0.5155940062460905
    ACOS(0)=1.5707963267948966

ASIN

  • 命令格式
    DOUBLE ASIN(DOUBLE number)
    DECIMAL ASIN(DECIMAL number)
  • 命令说明

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

  • 参数说明

    number:DOUBLE类型或DECIMAL类型,取值范围为[-1,1]。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。如果输入为其他数据类型则返回异常。

  • 返回值说明

    返回DOUBLE类型或DECIMAL类型,值域在-π/2~π/2之间。如果输入参数为NULL,则返回NULL。

  • 示例
    ASIN(1)=1.5707963267948966
    ASIN(-1)=-1.5707963267948966

ATAN

  • 命令格式
    DOUBLE ATAN(DOUBLE number)
  • 命令说明

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

  • 参数说明

    number:DOUBLE类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。如果输入为其他数据类型则返回异常。

  • 返回值说明

    返回DOUBLE类型,值域在-π/2~π/2之间。如果输入参数为NULL,则返回NULL。

  • 示例
    ATAN(1)=0.7853981633974483
    ATAN(-1)=-0.7853981633974483

CEIL

  • 命令格式
    BIGINT CEIL(DOUBLE value)
    BIGINT CEIL(DECIMAL value)
  • 命令说明

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

  • 参数说明

    value:DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。如果输入为其他类型则返回异常。

  • 返回值说明

    返回BIGINT类型。如果输入参数为NULL,则返回NULL。

  • 示例
    CEIL(1.1)=2
    CEIL(-1.1)=-1

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类型。如果任一输入参数为NULL,则返回NULL。转换过程以64位精度工作,溢出时返回异常。输入如果是负值,即以短划线(-)开头,返回异常。如果输入的是小数,会转为整数值后进行进制转换,小数部分会被舍弃。

  • 示例
    CONV('1100', 2, 10)='12'
    CONV('1100', 2, 16)='c'
    CONV('ab', 16, 10)='171'
    CONV('ab', 16, 16)='ab'

COS

  • 命令格式
    DOUBLE COS(DOUBLE number)
    DECIMAL COS(DECIMAL number)
  • 命令说明

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

  • 参数说明

    number:DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。如果输入为其他类型则返回异常。

  • 返回值说明

    返回DOUBLE类型或DECIMAL类型。如果输入参数为NULL,则返回NULL。

  • 示例
    COS(3.1415926/2)=2.6794896585028633e-8
    COS(3.1415926)=-0.9999999999999986

COSH

  • 命令格式
    DOUBLE COSH(DOUBLE number)
    DECIMAL COSH(DECIMAL number)
  • 命令说明

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

  • 参数说明

    number:DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。如果输入为其他类型则返回异常。

  • 返回值说明

    返回DOUBLE类型或DECIMAL类型。如果输入参数为NULL,则返回NULL。

COT

  • 命令格式
    DOUBLE COT(DOUBLE number)
    DECIMAL COT(DECIMAL number)
  • 命令说明

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

  • 参数说明

    number:DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。如果输入为其他类型则返回异常。

  • 返回值说明

    返回DOUBLE类型或DECIMAL类型。如果输入参数为NULL,则返回NULL。

EXP

  • 命令格式
    DOUBLE EXP(DOUBLE number)
    DECIMAL EXP(DECIMAL number)
  • 命令说明

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

  • 参数说明

    number:DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。如果输入为其他类型则返回异常。

  • 返回值说明

    返回number的指数值。返回值为DOUBLE类型或DECIMAL类型。如果输入参数为NULL,则返回NULL。

FLOOR

  • 命令格式
    BIGINT FLOOR(DOUBLE number)
    BIGINT FLOOR(DECIMAL number)
  • 命令说明

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

  • 参数说明

    number:DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。如果输入为其他类型则返回异常。

  • 返回值说明

    返回BIGINT类型。如果输入参数为NULL,则返回NULL。

  • 示例
    FLOOR(1.2)=1
    FLOOR(1.9)=1
    FLOOR(0.1)=0
    FLOOR(-1.2)=-2
    FLOOR(-0.1)=-1
    FLOOR(0.0)=0
    FLOOR(-0.0)=0

LN

  • 命令格式
    DOUBLE LN(DOUBLE number)
    DECIMAL LN(DECIMAL number)
  • 命令说明

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

  • 参数说明
    number:DOUBLE类型或DECIMAL类型。
    • 如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。如果输入为其他类型则返回异常。
    • 如果输入参数为NULL,则返回NULL;如果输入参数为负数或0,则返回异常。
  • 返回值说明

    返回DOUBLE类型或DECIMAL类型。

LOG

  • 命令格式
    DOUBLE LOG(DOUBLE base, DOUBLE x)
    DECIMAL LOG(DECIMAL base, DECIMAL x)
  • 命令说明

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

  • 参数说明
    • base:DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。如果输入为其他类型则返回异常。
    • x:DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。如果输入为其他类型则返回异常。
  • 返回值说明
    返回DOUBLE类型或DECIMAL类型的对数值。
    • 如果任一输入参数为NULL,则返回NULL。
    • 如果任一输入参数为负数或0,则返回异常。
    • 如果base为1(会引发一个除零行为),也会返回异常。

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类型。如果任一输入参数为NULL,则返回NULL。

RAND

  • 命令格式
    DOUBLE RAND(BIGINT seed)
  • 命令说明

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

  • 参数说明

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

  • 返回值说明

    返回DOUBLE类型。

  • 示例
    SELECT RAND();
    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类型。如果任一输入参数为NULL,则返回NULL。

  • 示例
    ROUND(125.315)=125.0
    ROUND(125.315, 0)=125.0
    ROUND(125.315, 1)=125.3
    ROUND(125.315, 2)=125.32
    ROUND(125.315, 3)=125.315
    ROUND(-125.315, 2)=-125.32
    ROUND(123.345, -2)=100.0
    ROUND(null)=null
    ROUND(123.345, 4)=123.345
    ROUND(123.345, -4)=0.0

SIN

  • 命令格式
    DOUBLE SIN(DOUBLE number)
    DECIMAL SIN(DECIMAL number)
  • 命令说明

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

  • 参数说明

    number:DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。如果输入其他类型则返回异常。

  • 返回值说明

    返回DOUBLE类型或DECIMAL类型。如果输入参数为NULL,则返回NULL。

SINH

  • 命令格式
    DOUBLE SINH(DOUBLE number)
    DECIMAL SINH(DECIMAL number)
  • 命令说明

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

  • 参数说明

    number:DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。如果输入其他类型则返回异常。

  • 返回值说明

    返回DOUBLE类型或DECIMAL类型。如果输入参数为NULL,则返回NULL。

SQRT

  • 命令格式
    DOUBLE SQRT(DOUBLE number)
    DECIMAL SQRT(DECIMAL number)
  • 命令说明

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

  • 参数说明

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

  • 返回值说明

    返回DOUBLE类型或DECIMAL类型。如果输入参数为NULL,则返回NULL。

TAN

  • 命令说明
    DOUBLE TAN(DOUBLE number)
    DECIMAL TAN(DECIMAL number)
  • 命令说明

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

  • 参数说明

    number:DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。如果输入其他类型则返回异常。

  • 返回值说明

    返回DOUBLE类型或DECIMAL类型。如果输入参数为NULL,则返回NULL。

TANH

  • 命令格式
    DOUBLE TANH(DOUBLE number)
    DECIMAL TANH(DECIMAL number)
  • 命令说明

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

  • 参数说明

    number:DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。如果输入其他类型则返回异常。

  • 返回值说明

    返回DOUBLE类型或DECIMAL类型。如果输入参数为NULL,则返回NULL。

TRUNC

  • 命令格式
    DOUBLE TRUNC(DOUBLE number[, BIGINT DECIMAL_places])
    DECIMAL TRUNC(DECIMAL number[, BIGINT DECIMAL_places])
  • 命令说明

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

  • 参数说明
    • number:DOUBLE类型或DECIMAL类型。如果输入为STRING类型或BIGINT类型,会隐式转换为DOUBLE类型后参与运算。如果输入其他类型则返回异常。
    • DECIMAL_places:BIGINT类型常量,要截取到的小数点位置。其他类型参数会隐式转为BIGINT,省略此参数时默认截取到个位数。
      说明 DECIMAL_places可以是负数,负数会从小数点向左开始截取,并且不保留小数部分。如果DECIMAL_places超过了整数部分长度,则返回0。
  • 返回值说明

    返回值类型为DOUBLE或DECIMAL类型。如果任一输入参数为NULL,则返回NULL。

    说明
    • 返回DOUBLE类型时,返回的结果显示可能不符合预期,例如TRUNC(125.815,1)(这个DOUBLE类型显示问题任何系统都存在)。
    • 截取掉的部分补0。
  • 示例
    TRUNC(125.815)=125.0
    TRUNC(125.815,0)=125.0
    TRUNC(125.815,1)=125.80000000000001
    TRUNC(125.815,2)=125.81
    TRUNC(125.815,3)=125.815
    TRUNC(-125.815,2)=-125.81
    TRUNC(125.815,-1)=120.0
    TRUNC(125.815,-2)=100.0
    TRUNC(125.815,-3)=0.0
    TRUNC(123.345,4)=123.345
    TRUNC(123.345,-4)=0.0

MaxCompute2.0扩展函数

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

LOG2

  • 命令格式
    DOUBLE LOG2(DOUBLE number)
    DOUBLE LOG2(DECIMAL number)
  • 命令说明

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

  • 参数说明

    number:DOUBLE或DECIMAL类型。

  • 返回值说明

    返回DOUBLE类型。如果输入参数为0或NULL,则返回NULL。

  • 示例
    LOG2(null)=null
    LOG2(0)=null
    LOG2(8)=3.0

LOG10

  • 命令格式
    DOUBLE LOG10(DOUBLE number)
    DOUBLE LOG10(DECIMAL number)
  • 命令说明

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

  • 参数说明

    number:DOUBLE或DECIMAL类型。

  • 返回值说明

    返回DOUBLE类型。如果输入参数为0或NULL,则返回NULL。

  • 示例
    LOG10(null)=null
    LOG10(0)=null
    LOG10(8)=0.9030899869919435

BIN

  • 命令格式
    STRING BIN(BIGINT number)
  • 命令说明

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

  • 参数说明

    number:BIGINT类型。

  • 返回值说明

    返回STRING类型。如果输入参数为0,则返回0;如果输入参数为NULL,则返回NULL。

  • 示例
    BIN(0)='0'
    BIN(null)='null'
    BIN(12)='1100'

HEX

  • 命令格式
    STRING HEX(BIGINT number) 
    STRING HEX(STRING number)
    STRING HEX(BINARY number)
  • 命令说明

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

  • 参数说明

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

  • 返回值说明
    • 如果输入非0或非NULL参数,则返回STRING类型。
    • 如果输入参数为0,则返回0。
    • 如果输入参数为NULL,则返回异常。
  • 示例
    HEX(0)=0
    HEX('abc')='616263'
    HEX(17)='11'
    HEX('17')='3137'
    HEX(null)返回异常信息执行失败。

UNHEX

  • 命令格式
    BINARY UNHEX(STRING number)
  • 命令说明

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

  • 参数说明

    number:为十六进制字符串。

  • 返回值说明

    返回BINARY类型。如果输入参数为0,则返回异常;如果输入参数为NULL,则返回NULL。

  • 示例
    UNHEX('616263')='abc'
    UNHEX(616263)='abc'

RADIANS

  • 命令格式
    DOUBLE RADIANS(DOUBLE number)
  • 命令说明

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

  • 参数说明

    number:DOUBLE类型数据。

  • 返回值说明

    返回DOUBLE类型。如果输入参数为NULL,则返回NULL。

  • 示例
    RADIANS(90)=1.5707963267948966
    RADIANS(0)=0.0
    RADIANS(null)=null

DEGREES

  • 命令格式
    DOUBLE DEGREES(DOUBLE number) 
    DOUBLE DEGREES(DECIMAL number)
  • 命令说明

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

  • 参数说明

    number:DOUBLE或DECIMAL类型数据。

  • 返回值说明

    返回DOUBLE类型。如果输入参数为NULL,则返回NULL。

  • 示例
    DEGREES(1.5707963267948966)=90.0
    DEGREES(0)=0.0
    DEGREES(null)=null

SIGN

  • 命令格式
    DOUBLE SIGN(DOUBLE number)
    DOUBLE SIGN(DECIMAL number)
  • 命令说明

    该函数用于获取输入参数的符号。

  • 参数说明

    number:DOUBLE或DECIMAL类型数据。

  • 返回值说明
    返回DOUBLE类型。
    • 如果输入参数为正数,则返回1.0。
    • 如果输入参数为负数,则返回-1.0。
    • 如果输入参数为0,则返回0.0。
    • 如果输入参数为NULL,则返回NULL。
  • 示例
    SIGN(-2.5)=-1.0
    SIGN(2.5)=1.0
    SIGN(0)=0.0
    SIGN(null)=null

E

  • 命令格式
    DOUBLE E()
  • 命令说明

    该函数用于返回e的值。

  • 返回值说明

    返回DOUBLE类型。

  • 示例
    E()=2.718281828459045

PI

  • 命令格式
    DOUBLE PI()
  • 命令说明

    该函数用于返回π的值。

  • 返回值说明

    返回DOUBLE类型。

  • 示例
    PI()=3.141592653589793

FACTORIAL

  • 命令格式
    BIGINT FACTORIAL(Int number)
  • 命令说明

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

  • 参数说明

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

  • 返回值说明

    返回BIGINT类型。如果输入参数为0,则返回1;如果输入参数为NULL或[0,20]之外的值,则返回NULL。

  • 示例
    FACTORIAL(5)=120 --5!=5*4*3*2*1=120

CBRT

  • 命令格式
    DOUBLE CBRT(DOUBLE number)
  • 命令说明

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

  • 参数说明

    number:DOUBLE类型数据。

  • 返回值说明

    返回DOUBLE类型。如果输入参数为NULL,则返回NULL。

  • 示例
    CBRT(8)=2
    CBRT(null)=null

SHIFTLEFT

  • 命令格式
    INT SHIFTLEFT(TINYINT|SMALLINT|INT number1, INT number2)
    BIGINT SHIFTLEFT(BIGINT number1, INT number2)
  • 命令说明

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

  • 参数说明
    • number1:TINYINT、SMALLINT、INT或BIGINT整型数据。
    • number2:INT整型数据。
  • 返回值说明

    返回INT或BIGINT类型。

  • 示例
    SHIFTLEFT(1,2)=4  //1的二进制左移2位(1<<2,0001左移两位是0100)。
    SHIFTLEFT(4,3)=32  //4的二进制左移3位(4<<3,0100左移3位是100000)。

SHIFTRIGHT

  • 命令格式
    INT SHIFTRIGHT(TINYINT|SMALLINT|INT number1, INT number2)
    BIGINT SHIFTRIGHT(BIGINT number1, INT number2)
  • 命令说明

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

  • 参数说明
    • number1:TINYINT、SMALLINT、INT或BIGINT整型数据。
    • number2:INT整型数据。
  • 返回值说明

    返回INT或BIGINT类型。

  • 示例
    SHIFTRIGHT(4,2)=1 //4的二进制右移2位(4>>2,0100右移两位是0001)。
    SHIFTRIGHT(32,3)=4 //32的二进制右移3位(32>>3,100000右移3位是0100)。

SHIFTRIGHTUNSIGNED

  • 命令格式
    INT SHIFTRIGHTUNSIGNED(TINYINT|SMALLINT|INT number1, INT number2)
    BIGINT SHIFTRIGHTUNSIGNED(BIGINT number1, INT number2)
  • 命令说明

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

  • 参数说明
    • number1:TINYINT、SMALLINT、INT或BIGINT整型数据。
    • number2:INT整型数据。
  • 返回值说明

    返回INT或BIGINT类型。

  • 示例
    SHIFTRIGHTUNSIGNED(8,2)=2  //8的二进制无符号右移2位(8>>>2,1000右移两位是0010)。
    SHIFTRIGHTUNSIGNED(-14,2)=1073741820  //-14的二进制右移2位(-14>>>2, 11111111 11111111 11111111 11110010右移2位是00111111 11111111 11111111 11111100)。

FORMAT_NUMBER

  • 命令格式
    STRING FORMAT_NUMBER(FLOAT|DOUBLE|DECIMAL expr1, expr2)
  • 命令说明

    将数字转化为指定格式的字符串。

  • 参数说明
    • expr1:需要格式化的数据。
    • expr2:需要转化的目标格式。可以为INT类型,指定需要保留小数位数。也可以为类似#,###,###.##格式描述。
      • 如果expr2>0,则四舍五入到小数点后指定位数。
      • 如果expr2=0,则没有小数点或小数部分。
      • 如果expr2<0,或者expr2>340,则返回异常。
  • 返回值说明

    返回STRING类型数据。

  • 示例
    SELECT FORMAT_NUMBER(5.230134523424545456,3);//返回5.230。
    SELECT FORMAT_NUMBER(12332.123456, '#,###,###,###.###');//返回12,332.123。

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数据类型版本

  • 参数说明
    • expr:需要判断分组编号的字段。
    • min_value:分组范围最小值。
    • max_value:分组范围最大值,最大值必须比最小值大。
    • num_buckets:分组个数,必须大于0。
  • 返回值说明

    返回值为BIGINT类型,范围为0到设定的分组个数+1。如果expr值小于min_value,返回0。如果expr大于max_value,返回设定的分组个数+1。如果字段值为NULL,分组编号返回值也为NULL。其他情况返回字段值落入的分组编号。字段值对应的分组编号取值规则为FLOOR( num_buckets * (expr - min_value)/(max_value - min_value) + 1)

  • 示例
    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          |
    +-------+--------+-------------+