更新时间:2022-02-22 GMT+08:00

数学运算函数

关系运算符

所有数据类型都可用关系运算符进行比较,并返回一个BOOLEAN类型的值。

关系运算符均为双目操作符,被比较的两个数据类型必须是相同的数据类型或者是可以进行隐式转换的类型。

Flink SQL提供的关系运算符,请参见表1

表1 关系运算符

运算符

返回类型

描述

A = B

BOOLEAN

若A与B相等,返回TRUE,否则返回FALSE。用于做赋值操作。

A <> B

BOOLEAN

若A与B不相等,则返回TRUE,否则返回FALSE。若A或B为NULL,则返回NULL,该种运算符为标准SQL语法。

A < B

BOOLEAN

若A小于B,则返回TRUE,否则返回FALSE。若A或B为NULL,则返回NULL。

A <= B

BOOLEAN

若A小于或者等于B,则返回TRUE,否则返回FALSE。若A或B为NULL,则返回NULL。

A > B

BOOLEAN

若A大于B,则返回TRUE,否则返回FALSE。若A或B为NULL,则返回NULL。

A >= B

BOOLEAN

若A大于或者等于B,则返回TRUE,否则返回FALSE。若A或B为NULL,则返回NULL。

A IS NULL

BOOLEAN

若A为NULL则返回TRUE,否则返回FALSE。

A IS NOT NULL

BOOLEAN

若A不为NULL,则返回TRUE,否则返回FALSE。

A IS DISTINCT FROM B

BOOLEAN

若A与B不相等,则返回TRUE,将空值视为相同。

A IS NOT DISTINCT FROM B

BOOLEAN

若A与B相等,则返回TRUE,将空值视为相同。

A BETWEEN [ASYMMETRIC | SYMMETRIC] B AND C

BOOLEAN

若A大于或等于B且小于或等于C,则返回TRUE。

  • ASYMMETRIC:表示B和C位置相关。

    例如:A BETWEEN ASYMMETRIC B AND C 等价于 (A BETWEEN B AND C)。

  • SYMMETRIC:表示B和C位置不相关。

    例如:A BETWEEN SYMMETRIC B AND C 等价于 (A BETWEEN B AND C) OR (A BETWEEN C AND B)。

A NOT BETWEEN B AND C

BOOLEAN

若A小于B或大于C,则返回TRUE。

A LIKE B [ ESCAPE C ]

BOOLEAN

若A与模式B匹配,则返回TRUE。 必要时可以定义转义字符C。

A NOT LIKE B [ ESCAPE C ]

BOOLEAN

若A与模式B不匹配,则返回TRUE。 必要时可以定义转义字符C。

A SIMILAR TO B [ ESCAPE C ]

BOOLEAN

若A与正则表达式B匹配,则返回TRUE。 必要时可以定义转义字符C。

A NOT SIMILAR TO B [ ESCAPE C ]

BOOLEAN

若A与正则表达式B不匹配,则返回TRUE。 必要时可以定义转义字符C。

value IN (value [, value]* )

BOOLEAN

若值等于列表中的值,则返回TRUE。

value NOT IN (value [, value]* )

BOOLEAN

若值不等于列表中的每个值,则返回TRUE。

  • double、real和float值存在一定的精度差。且我们不建议直接使用等号“=”对两个double类型数据进行比较。用户可以使用两个double类型相减,而后取绝对值的方式判断。当绝对值足够小时,认为两个double数值相等,例如:
    abs(0.9999999999 - 1.0000000000) < 0.000000001 //0.9999999999和1.0000000000为10位精度,而0.000000001为9位精度,此时可以认为0.9999999999和1.0000000000相等。
  • 数值类型可与字符串类型进行比较。做大小(>,<,>=,<=)比较时,会默认将字符串转换为数值类型,因此不支持字符串内有除数字字符之外的字符。
  • 字符串之间可以进行比较。

逻辑运算符

常用的逻辑操作符有AND、OR和NOT,优先级顺序为:NOT>AND>OR。

运算规则请参见表2,表中的A和B代表逻辑表达式。

表2 逻辑运算符

运算符

返回类型

描述

A OR B

BOOLEAN

若A或B为TRUE,则返回TRUE,且支持三值逻辑。

A AND B

BOOLEAN

若A和B为TRUE,则返回TRUE,且支持三值逻辑。

NOT A

BOOLEAN

若A不为TRUE则返回TRUE;若A为UNKNOWN,返回UNKNOWN。

A IS FALSE

BOOLEAN

若A为FALSE则返回TRUE; 若A为UNKNOWN,则返回FALSE。

A IS NOT FALSE

BOOLEAN

若A不为FALSE则返回TRUE;若A为UNKNOWN,则返回TRUE。

A IS TRUE

BOOLEAN

若A为TRUE,则返回TRUE;若A为UNKNOWN,则返回FALSE。

A IS NOT TRUE

BOOLEAN

若A不为TRUE则返回TRUE;若A为UNKNOWN,则返回TRUE。

A IS UNKNOWN

BOOLEAN

若A为UNKNOWN,则返回TRUE。

A IS NOT UNKNOWN

BOOLEAN

若A不为UNKNOWN,则返回TRUE。

逻辑操作符只允许boolean类型参与运算,不支持隐式类型转换。

算术运算符

算术运算符包括双目运算符与单目运算符,这些运算符都将返回数字类型。Flink SQL所支持的算术运算符如表3所示。

表3 算术运算符

运算符

返回类型

描述

+ numeric

所有数字类型

返回数字。

- numeric

所有数字类型

返回负数。

A + B

所有数字类型

A和B相加。结果数据类型与操作数据类型相关,例如一个整数类型数据加上一个浮点类型数据,结果数值为浮点类型数据。

A - B

所有数字类型

A和B相减。结果数据类型与操作数据类型相关。

A * B

所有数字类型

A和B相乘。结果数据类型与操作数据类型相关。

A / B

所有数字类型

A和B相除。结果是一个double(双精度)类型的数值。

POWER(A, B)

所有数字类型

返回A数的B次方乘幂。

ABS(numeric)

所有数字类型

返回数值的绝对值。

MOD(A, B)

所有数字类型

返回A除以B的余数(模数)。 返回值只有在A为负数时才为负数。

SQRT(A)

所有数字类型

返回A的平方根。

LN(A)

所有数字类型

返回A的自然对数(基数e)。

LOG10(A)

所有数字类型

返回A的基数10对数。

EXP(A)

所有数字类型

返回e的a次方。

CEIL(A)

CEILING(A)

所有数字类型

将参数向上舍入为最接近的整数。例如ceil(21.2),返回22。

FLOOR(A)

所有数字类型

对给定数据进行向下舍入最接近的整数。例如floor(21.2),返回21。

SIN(A)

所有数字类型

计算给定A的正弦值。

COS(A)

所有数字类型

计算给定A的余弦值。

TAN(A)

所有数字类型

计算给定A的正切值。

COT(A)

所有数字类型

计算给定A的余切值。

ASIN(A)

所有数字类型

计算给定A的反正弦值。

ACOS(A)

所有数字类型

计算给定A的反余弦值。

ATAN(A)

所有数字类型

计算给定A的反正切值。

DEGREES(A)

所有数字类型

返回弧度所对应的角度。

RADIANS(A)

所有数字类型

返回角度所对应的弧度。

SIGN(A)

所有数字类型

返回a所对应的正负号,a为正返回1,a为负,返回-1,否则则返回0。

ROUND(A, d)

所有数字类型

返回小数部分d位之后数字的四舍五入,d为int型。例如round(21.263,2),返回21.26。

PI()

所有数字类型

返回pi的值。

字符串类型不能参与算术运算。