すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:演算子

最終更新日:Dec 06, 2024

演算子はSQL文の鍵です。 演算子を使用すると、複雑なデータ取得および処理タスクを実行できます。 これにより、より効率的なデータ処理、条件付き判断、またはその他の操作を実現できます。 このトピックでは、MaxComputeでサポートされている演算子の形式と意味について説明します。 このトピックでは、これらの演算子の使用例も示します。

次の表に、MaxComputeでサポートされている演算子の種類を示します。

演算子タイプ

説明

リレーショナルオペレーター

比較操作に使用されます。

文字演算子

文字列連結操作に使用されます。

算術演算子

算術演算に使用されます。

ビットごとの演算子

2進数の操作に使用されます。

論理演算子

複数の条件を接続するために使用されます。 ほとんどの場合、論理演算子は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 が返されます。

  • パーセント記号 (%) は任意の文字数に一致します。

  • アンダースコア (_) は1文字と一致します。

  • パーセント記号 (%) またはアンダースコア (_) を一致させるには、パーセント記号 (%) またはアンダースコア (_) を一重引用符 (') でエスケープする必要があります。 パーセント記号 (%) またはアンダースコア (_) がエスケープされた後、'%' または '_' が一致に使用されます。

'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または正規表現Bと一致する場合、TRUEが返されます。 それ以外の場合は、FALSE が返されます。 Bが空の文字列の場合、エラーが返されます。 A または B が NULL の場合は NULL が返されます。

説明

「ARLIKE B」は、「A REGEXPB」と同じ効果を有する。

A IN B

  • AがセットBに含まれている場合、TRUEが返されます。 それ以外の場合は、FALSE が返されます。

  • AがNULLの場合、NULLが返されます。

  • セットBは定数セットで、少なくとも1つの要素を含む必要があります。 セットBのすべての要素は同じデータ型でなければなりません。

BETWEEN AND

式はA [NOT] BETWEEN B AND Cです。

  • A、B、またはCがNULLの場合、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が返され得る。 データ型変換の詳細については、「型変換」をご参照ください。

MaxComputeのDOUBLE型の値は精度が異なります。 したがって、DOUBLE型の2つの値の比較には等号 (=) を使用しないことをお勧めします。 DOUBLE型の値をDOUBLE型の別の値から減算し、比較用の絶対値を取得できます。 絶対値が無視できる場合、DOUBLEタイプの2つの値は等しいと見なされます。 例:

ABS(0.9999999999 - 1.0000000000) < 0.000000001
 -- 0.9999999999 and 1.0000000000 have a precision of 10 decimal digits, whereas 0.000000001 has a precision of 9 decimal digits. 
 -- 0.9999999999 is considered to be equal to 1.0000000000.

説明
  • ABSは、MaxComputeが提供する組み込み関数です。 この関数は、入力の絶対値を取得するために使用されます。 詳細は、「ABS」をご参照ください。

  • ほとんどの場合、MaxComputeのDOUBLE型の値は、10進数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型のパラメーター値だけです。 日付の値とBOOLEAN型の値は、算術演算では使用できません。 TIMESTAMP_NTZデータ型の詳細については、「MaxCompute TIMESTAMP_NTZデータ型」をご参照ください。

  • STRING型の値は、算術演算の前に暗黙的にDOUBLE型に変換されます。

  • BIGINT型およびDOUBLE型の値を使用して算術演算を実行する場合、演算の前にBIGINT型の値が暗黙的にDOUBLE型に変換されます。 戻り値は DOUBLE 型です。

  • AとBがBIGINT型の場合、A/B操作を実行した後の戻り値はDOUBLE型になります。 他の算術演算の場合、戻り値はBIGINT型です。

ビット演算子

演算子

説明

  • BITAND

  • &

  • ビット (A、B)

  • A&B

AとBのビット単位のAND結果が返されます。 たとえば、1&2の結果は0であり、BITAND(1,3) の結果は1であり、NULLと任意の値のビット単位のand結果はNULLです。 AとBはBIGINT型でなければなりません。

  • BITOR

  • |

  • BITOR(A、B)

  • A | B

AとBのビット単位のOR結果が返されます。 たとえば、1 | 2の結果は3であり、BITOR(1,3) の結果は3であり、NULLと任意の値とのビット単位のOR結果はNULLである。 AとBはBIGINT型でなければなりません。

  • BITNOT

  • ~

  • ビットノット (A)

  • ~ A

Aのビット単位NOT結果が返される。 例えば、〜1の結果は − 2であり、BITNOT(7) の結果は − 8であり、NULL値のビット単位NOT結果はNULLである。 AはBIGINT型でなければなりません。

  • BITXOR

  • ^

  • ビットXOR(A、B)

  • A ^ B

AおよびBのビットごとのXOR結果が返される。 たとえば、1 ^ 2の結果は3であり、BITXOR(4,5) の結果は1であり、NULLと任意の値のビットごとのXOR結果は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 and b are calculated before c. 
a=1 and (b=1 or c=1)      -- b and c are calculated before a.