2.7 自拓展生态
2.9.1 数学运算函数
关系运算符
所有数据类型都可用关系运算符进行比较,并返回一个BOOLEAN类型的值。
关系运算符均为双目操作符,被比较的两个数据类型必须是相同的数据类型或者是可 以进行隐式转换的类型。
Flink SQL提供的关系运算符,请参见表2-31。
表2-31 关系运算符
运算符 返回
类型
描述
A = B BOOL
EAN 若A与B相等,返回TRUE,否则返回FALSE。用于做 赋值操作。
A <> B BOOL
EAN 若A与B不相等,则返回TRUE,否则返回FALSE。若A 或B为NULL,则返回NULL,该种运算符为标准SQL 语法。
A < B BOOL
EAN 若A小于B,则返回TRUE,否则返回FALSE。若A或B 为NULL,则返回NULL。
A <= B BOOL
EAN 若A小于或者等于B,则返回TRUE,否则返回 FALSE。若A或B为NULL,则返回NULL。
A > B BOOL
EAN 若A大于B,则返回TRUE,否则返回FALSE。若A或B 为NULL,则返回NULL。
A >= B BOOL
EAN 若A大于或者等于B,则返回TRUE,否则返回 FALSE。若A或B为NULL,则返回NULL。
A IS NULL BOOL
EAN 若A为NULL则返回TRUE,否则返回FALSE。
A IS NOT NULL BOOL
EAN 若A不为NULL,则返回TRUE,否则返回FALSE。
A IS DISTINCT
FROM B BOOL
EAN 若A与B不相等,则返回TRUE,将空值视为相同。
A IS NOT
DISTINCT FROM B BOOL
EAN 若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 BOOL
EAN 若A小于B或大于C,则返回TRUE。
A LIKE B [ ESCAPE
C ] BOOL
EAN 若A与模式B匹配,则返回TRUE。 必要时可以定义转 义字符C。
A NOT LIKE B
[ ESCAPE C ] BOOL
EAN 若A与模式B不匹配,则返回TRUE。 必要时可以定义 转义字符C。
A SIMILAR TO B
[ ESCAPE C ] BOOL
EAN 若A与正则表达式B匹配,则返回TRUE。 必要时可以 定义转义字符C。
A NOT SIMILAR
TO B [ ESCAPE C ] BOOL
EAN 若A与正则表达式B不匹配,则返回TRUE。 必要时可 以定义转义字符C。
value IN (value [,
value]* ) BOOL
EAN 若值等于列表中的值,则返回TRUE。
value NOT IN
(value [, value]* ) BOOL
EAN 若值不等于列表中的每个值,则返回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-32,表中的A和B代表逻辑表达式。
表2-32 逻辑运算符
运算符 返回类型 描述
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 ISFALSE BOOLEAN 若A为FALSE则返回TRUE; 若A为UNKNOWN,则返回 FALSE。
A IS NOT
FALSE BOOLEAN 若A不为FALSE则返回TRUE;若A为UNKNOWN,则返 回TRUE。
A ISTRUE BOOLEAN 若A为TRUE,则返回TRUE;若A为UNKNOWN,则返回 FALSE。
A IS NOT
TRUE BOOLEAN 若A不为TRUE则返回TRUE;若A为UNKNOWN,则返回 TRUE。
A ISUNKNO WN
BOOLEAN 若A为UNKNOWN,则返回TRUE。
A IS NOT UNKNO WN
BOOLEAN 若A不为UNKNOWN,则返回TRUE。
说明
逻辑操作符只允许boolean类型参与运算,不支持隐式类型转换。
算术运算符
算术运算符包括双目运算符与单目运算符,这些运算符都将返回数字类型。Flink SQL 所支持的算术运算符如表2-33所示。
表2-33 算术运算符
运算符 返回类型 描述
+numeric 所有数字类 型
返回数字。
-numeric 所有数字类 型
返回负数。
A + B 所有数字类
型 A和B相加。结果数据类型与操作数据类型相关,例如一个 整数类型数据加上一个浮点类型数据,结果数值为浮点类 型数据。