演算子はSQL文の鍵です。 演算子を使用すると、複雑なデータ取得および処理タスクを実行できます。 これにより、より効率的なデータ処理、条件付き判断、またはその他の操作を実現できます。 このトピックでは、MaxComputeでサポートされている演算子の形式と意味について説明します。 このトピックでは、これらの演算子の使用例も示します。
次の表に、MaxComputeでサポートされている演算子の種類を示します。
演算子タイプ | 説明 |
比較操作に使用されます。 | |
文字列連結操作に使用されます。 | |
算術演算に使用されます。 | |
2進数の操作に使用されます。 | |
複数の条件を接続するために使用されます。 ほとんどの場合、論理演算子はBOOLEAN型の式または値を接続するために使用されます。 |
関係演算子
演算子 | 説明 |
A=B |
|
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または正規表現Bと一致する場合、TRUEが返されます。 それ以外の場合は、FALSE が返されます。 Bが空の文字列の場合、エラーが返されます。 A または B が NULL の場合は NULL が返されます。 説明 「ARLIKE B」は、「A REGEXPB」と同じ効果を有する。 |
A IN B |
|
BETWEEN AND | 式は
|
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が返され得る。 データ型変換の詳細については、「型変換」をご参照ください。
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型です。
ビット演算子
演算子 | 例 | 説明 |
|
| AとBのビット単位のAND結果が返されます。 たとえば、 |
|
| AとBのビット単位のOR結果が返されます。 たとえば、 |
|
| Aのビット単位NOT結果が返される。 例えば、 |
|
| AおよびBのビットごとのXOR結果が返される。 たとえば、 |
ビット演算子は、暗黙的な型変換をサポートしません。 ビット単位の演算では、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.