开发者社区> 问答> 正文

MaxCompute用户指南:SQL:运算符



关系操作符

操作符说明
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 BA是字符串,B是字符串常量正则表达式; 如果匹配成功,返回TRUE,否则返回FALSE; 如果B为空串会报错退出;如果A或B为NULL,返回NULL;
A IN BB是一个集合,如果A为NULL,返回NULL,如A在B中则返回TRUE,否则返回FALSE 若B仅有一个元素NULL,即AIN(NULL),则返回NULL。 若B含有NULL元素,将NULL视为B集合中其他元素的类型。 B必须是常数并且至少有一项,所有类型要一致
BETWEEN  AND表达式为A [NOT] BETWEEN B AND C。如果A、B或C为空,则为空;如果A大于或等于B且小于或等于C,则为true,否则为false。

常见用法如下所示:  
  1. select * from user where user_id = '0001';
  2. select * from user where user_name <> 'maggie';
  3. select * from user where age > ‘50’;
  4. select * from user where birth_day >= '1980-01-01 00:00:00';
  5. select * from user where is_female is null;
  6. select * from user where is_female is not null;
  7. select * from user where user_id in (0001,0010);
  8. select * from user where user_name like 'M%';

由于 double 值存在一定的精度差,因此,不建议您直接使用等号对两个 double 类型的数据进行比较。您可以使用两个 double 类型相减,然后取绝对值的方式进行判断。当绝对值足够小时,认为两个 double 数值相等,示例如下:
  1.     abs(0.9999999999 - 1.0000000000) < 0.000000001
  2.     -- 0.9999999999和1.0000000000为10位精度,而0.000000001为9位精度。
  3.     -- 此时可以认为0.9999999999和1.0000000000相等。

注意:

  • ABS 是 MaxCompute 提供的内建函数,意为取绝对值,详情请参见 ABS

  • 通常情况下,MaxCompute 的 double 类型能够保障 14 位有效数字。


算术操作符

操作符说明
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。

常见用法如下:  
  1. select age+10, age-10, age%10, -age, age*age, age/10
  2. 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 类型。


逻辑操作符

  1.     操作符            说明
  2.     A and B         TRUE and TRUE=TRUE
  3.                     TRUE and FALSE=FALSE
  4.                     FALSE and TRUE=FALSE
  5.                     FALSE and NULL=FALSE
  6.                     NULL and FALSE=FALSE
  7.                     TRUE and NULL=NULL
  8.                     NULL and TRUE=NULL
  9.                     NULL and NULL=NULL
  10.     A or B          TRUE or TRUE=TRUE
  11.                     TRUE or FALSE=TRUE
  12.                     FALSE or TRUE=TRUE
  13.                     FALSE or NULL=NULL
  14.                     NULL or FALSE=NULL
  15.                     TRUE or NULL=TRUE
  16.                     NULL or TRUE=TRUE
  17.                     NULL or NULL=NULL
  18.     NOT A           如果A是NULL,返回NULL
  19.                     如果A是TRUE,返回FALSE
  20.                     如果A是FALSE,返回TRUE

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

展开
收起
行者武松 2017-10-23 15:41:21 2240 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
Data+AI时代大数据平台应该如何建设 立即下载
大数据AI一体化的解读 立即下载
极氪大数据 Serverless 应用实践 立即下载