运算符用于执行程序代码运算,本文向您介绍四种类型运算符:关系运算符、算术运算符、位运算符、逻辑运算符。

关系运算符

运算符 说明
A=B 如果A或B为NULL,返回NULL;如果A等于B,返回TRUE,否则返回FALSE。
A<>B 如果A或B为NULL,返回NULL;如果A不等于B,返回TRUE,否则返回FALSE。
A<B 如果A或B为NULL,返回NULL;如果A小于B,返回TRUE,否则返回FALSE。
A<=B 如果A或B为NULL,返回NULL;如果A小于等于B,返回TRUE,否则返回FALSE。
A>B 如果A或B为NULL,返回NULL;如果A大于B,返回TRUE,否则返回FALSE。
A>=B 如果A或B为NULL,返回NULL;如果A大于等于B,返回TRUE,否则返FALSE。
A IS NULL 如果A为NULL,返回TRUE,否则返回FALSE。
A IS NOT NULL 如果A不为NULL,返回TRUE,否则返回FALSE。
A LIKE B 如果A或B为NULL,返回NULL,A为字符串,B为要匹配的模式, 如果匹配,返回TRUE,否则返回FALSE。(%)匹配任意多个字符,(_)匹配单个字符。要匹配(%)或(_)要用转义符表示(‘%’)或(‘_’)。
‘aaa’ like‘a__’= TRUE 
‘aaa’ like‘a%’ = TRUE
‘aaa’ like‘aab’= FALSE 
‘a%b’ like‘a\\%b’= TRUE 
‘axb’ like ‘a\\%b’= FALSE               
A RLIKE B A是字符串,B是字符串常量正则表达式。如果匹配成功,返回TRUE,否则返回FALSE。如果B为空串会报错退出。如果A或B为NULL,返回NULL。
A IN B
  • B为一个集合,如果A在B中则返回TRUE,否则返回FALSE。
  • 如果A为NULL,返回NULL。
  • 如果B仅包含一个NULL元素,即A IN(NULL),则返回NULL;如果B集合中包含NULL元素(也包含其它元素),则将NULL视为B集合中其它元素的类型。
  • B必须是常数集合且至少包含一个项,且所有项的数据类型需一致。
BETWEEN AND 表达式为A [NOT] BETWEEN B AND C。如果A、B或C为空,则为空。如果A大于或等于B且小于或等于C,则为TRUE,否则为FALSE。
常见用法如下所示:
select * from user where user_id = '0001'; 
select * from user where user_name <> 'maggie'; 
select * from user where age > ‘50’; 
select * from user where birth_day >= '1980-01-01 00:00:00'; 
select * from user where is_female is null; 
select * from user where is_female is not null; 
select * from user where user_id in (0001,0010); 
select * from user where user_name like 'M%';
在进行部分关系运算之前,您需要首先进行类型转换,否则可能返回null。如下举例,'2019-02-16 00:00:01'为DATETIME类型,而'2019-02-16'为STRING类型,在进行比较关系运算前需首先完成显示类型转换。
select cast('2019-02-16 00:00:01' AS string) > '2019-02-16';
select cast('2019-02-16 00:00:02' AS datetime) > '2019-02-16 00:00:01';
由于DOUBLE值存在一定的精度差,因此,不建议您直接使用等号对两个DOUBLE类型的数据进行比较。您可以使用两个DOUBLE类型相减,然后取绝对值的方式进行判断。当绝对值足够小时,认为两个DOUBLE数值相等,示例如下。
abs(0.9999999999 - 1.0000000000) < 0.000000001
 -- 0.9999999999和1.0000000000为10位精度,而0.000000001为9位精度。
 -- 此时可以认为0.9999999999和1.0000000000相等。
说明
  • ABS是MaxCompute提供的内建函数,意为取绝对值,详情请参见ABS
  • 通常情况下,MaxCompute的DOUBLE类型能够保障14位有效数字。
  • 当将STRING和BIGINT类型数据进行数值比较时,两个数据都将自动转换成DOUBLE类型,因此在比较过程中可能存在精度丢失现象。这种情况下,您可以通过cast string as bigint的方式将STRING数值转换为BIGINT类型后再进行比较。

算术运算符

运算符 说明
A + B 如果A或B为NULL,返回NULL;否则返回A + B的结果。
A – B 如果A或B为NULL,返回NULL;否则返回A – B的结果。
A * B 如果A或B为NULL,返回NULL;否则返回A * B的结果。
A / B 如果A或B为NULL,返回NULL;否则返回A / B的结果。
说明 如果A和B为BIGINT类型,返回结果为DOUBLE类型。
A % B 如果A或B为NULL,返回NULL;否则返回A模B的结果。
+A 仍然返回A。
-A 如果A为NULL,返回NULL,否则返回-A。
常见用法如下:
select age+10, age-10, age%10, -age, age*age, age/10 from user;
说明
  • 只有参数是STRING、BIGINT或DOUBLE类型才能参与算术运算,日期型和布尔型不允许参与运算。
  • STRING类型在参与运算前会进行隐式类型转换,转换为DOUBLE类型。
  • BIGINT和DOUBLE类型共同参与计算时,会将BIGINT隐式转换为DOUBLE再进行计算,返回结果为DOUBLE类型。
  • A和B都是BIGINT类型,进行A/B运算,返回结果为DOUBLE类型。进行上述其他运算,仍然返回BIGINT类型。

位运算符

运算符 说明
A & B 返回A与B进行按位与的结果。例如1&2返回0,1&3返回1,NULL与任何值按位与都为NULL。A和B必须为BIGINT类型。
A | B 返回A与B进行按位或的结果。例如1 |2返回3,1 |3返回3,NULL与任何值按位或都为NULL。A和B必须为BIGINT类型。
说明 位运算符不支持隐式转换,只允许BIGINT类型。

逻辑运算符

运算符 说明
A and B TRUE and TRUE=TRUE
TRUE and FALSE=FALSE
FALSE and TRUE=FALSE
FALSE and NULL=FALSE
NULL and FALSE=FALSE
TRUE and NULL=NULL
NULL and TRUE=NULL
NULL and NULL=NULL
A or B TRUE or TRUE=TRUE
TRUE or FALSE=TRUE
FALSE or TRUE=TRUE
FALSE or NULL=NULL
NULL or FALSE=NULL
TRUE or NULL=TRUE
NULL or TRUE=TRUE
NULL or NULL=NULL
NOT A 如果A是NULL,返回NULL
如果A是TRUE,返回FALSE
如果A是FALSE,返回TRUE
说明 逻辑运算符只允许BOOLEAN类型参与运算,不支持隐式类型转换。