全部產品
Search
文件中心

MaxCompute:運算子

更新時間:Oct 01, 2024

運算子是構建SQL語句的關鍵,使得您可以執行複雜的資料檢索和操作任務,協助您實現更有效率的資料處理、條件判斷或其他動作。本文為您介紹MaxCompute支援的運算子,包括運算子的格式、含義和使用樣本。

MaxCompute支援的運算子如下。

運算子類型

說明

關係運算子

用於比較運算。

字元操作符

用於字串串連操作。

算術運算子

用於各類數值運算。

位元運算符

用於按照二進位位進行運算。

邏輯運算子

用於多條件串連,一般用於串連BOOLEAN類型的運算式或者值。

關係運算子

運算子

說明

A=B

  • A或B為NULL,返回NULL。

  • A等於B,返回TRUE,否則返回FALSE。

A<=>B

  • A和B都為NULL,返回TRUE。

  • A和B其中一個為NULL,返回FALSE。

  • 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是字串常量或者Regex。如果匹配成功,返回TRUE,否則返回FALSE。如果B為空白串會報錯。如果A或B為NULL,返回NULL。

說明

A RLIKE BA REGEXP B效果相同。

A IN B

  • B為一個集合,如果A在B中,返回TRUE,否則返回FALSE。

  • 如果A為NULL,返回NULL。

  • B必須是常數集合且至少包含一個項,且所有項的資料類型需要一致。

BETWEEN AND

運算式為A [NOT] BETWEEN B AND C

  • A、B或C為NULL,則為空白。

  • A大於等於B且小於等於C,返回TRUE,否則返回FALSE。

IS [NOT] DISTINCT FROM

運算式為A IS [NOT] DISTINCT FROM B

常見用法如下。

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,詳情請參見資料類型轉換

由於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||c相當於CONCAT(a, b, c)。

算術運算子

運算子

說明

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。

A DIV B

A或B為NULL,返回NULL,否則返回A DIV B的結果。

常見用法如下。

SELECT age+10, age-10, age%10, -age, age*age, age/10, age div 10 FROM user;
說明
  • STRING、BIGINT、DOUBLE和TIMESTAMP_NTZ類型的參數支援參與算術運算,日期和布爾類型不允許參與運算。關於TIMESTAMP_NTZ資料類型詳情,請參見MaxCompute TIMESTAMP_NTZ資料類型

  • STRING類型在參與運算前會隱式轉換為DOUBLE類型。

  • BIGINT和DOUBLE類型共同參與計算時,系統會將BIGINT類型隱式轉換為DOUBLE類型再進行計算,返回結果為DOUBLE類型。

  • A和B都是BIGINT類型,執行A/B運算,返回結果為DOUBLE類型。執行上述其他運算,返回BIGINT類型。

位元運算符

運算子

樣本

說明

  • BITAND

  • &

  • BITAND(A,B)

  • A&B

返回A和B進行按位與運算的結果。例如1&2返回0,BITAND(1,3)返回1,NULL和任何值按位與運算都為NULL。A和B必須為BIGINT類型。

  • BITOR

  • |

  • BITOR(A,B)

  • A|B

返回A和B進行按位或運算的結果。例如1|2返回3,BITOR(1,3)返回3,NULL和任何值按位或運算都為NULL。A和B必須為BIGINT類型。

  • BITNOT

  • ~

  • BITNOT(A)

  • ~A

返回A按位非運算的結果。例如~1返回-2,BITNOT(7)返回-8,NULL值按位非運算都為NULL。A必須為BIGINT類型。

  • BITXOR

  • ^

  • BITXOR(A,B)

  • A^B

返回A和B進行按位異或運算的結果。例如1^2返回3,BITXOR(4,5)返回1,NULL和任何值按位異或運算都為NULL。A和B必須為BIGINT類型。

說明

位元運算符不支援隱式轉換,只允許BIGINT類型參與運算。

邏輯運算子

運算子

說明

A and B

TRUE and TRUE=TRUE

TRUE and FALSE=FALSE

FALSE and TRUE=FALSE

FALSE and FALSE=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 FALSE=FALSE

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類型參與運算,不支援隱式類型轉換。

運算子優先順序

不同運算子的優先順序如下表所示,從上到下優先順序遞減。相同優先順序預設是從左至右進行計算。

運算子

優先順序

IS (NOT) NULL

1

^

2

*、/、%、DIV

3

+、-

4

||

5

&

6

|

7

(NOT) LIKE、 (NOT) RLIKE、=、==、IS (NOT) DISTINCT FROM、<>、!=、<=、<、>=、>

8

(NOT) IN、 (NOT) BETWEEN AND

9

NOT

10

AND

11

OR

12

如果某些運算要優先處理,需要添加英文括弧。運算優先順序樣本如下。

a=1 and b=1 or c=1        --先計算a和b,再計算c。
a=1 and (b=1 or c=1)      --先計算b和c,再計算a。