运算符用于执行程序代码运算。本文为您介绍Dataphin支持的MaxCompute的运算符,包括关系运算符、算术运算符、位运算符和逻辑运算符。
关系运算符
| 运算符 | 说明 | 
|---|---|
| A=B | 
                              
  | 
                        
| A<>B | 
                              
  | 
                        
| A<B | 
                              
  | 
                        
| A<=B | 
                              
  | 
                        
| A>B | 
                              
  | 
                        
| A>=B | 
                              
  | 
                        
| 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。
                              
  | 
                        
| A RLIKE B | A是字符串,B是字符串常量或者正则表达式。如果匹配成功,返回TRUE,否则返回FALSE。如果B为空串会报错。如果A或B为NULL,返回NULL。 | 
| A IN B | 
                              
  | 
                        
| BETWEEN AND | 表达式为A [NOT] BETWEEN B AND C。
                              
  | 
                        
| IS [NOT] DISTINCT FROM | 表达式为A IS [NOT] DISTINCT FROM B。详情请参见IS DISTINCT FROM和IS NOT DISTINCT FROM。
                            | 
                        
常见用法如下。
                  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类型。 | 
| A||B | 字符串连接操作符。例如a||b||c相当于CONCAT(a, b, c)。
                            | 
                        
说明 位运算符不支持隐式转换,只允许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类型参与运算,不支持隐式类型转换。