演算子は 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 が返されます。 説明 「A RLIKE B」は「A REGEXP B」と同じ効果があります。 |
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 型の値は精度が異なります。したがって、2 つの DOUBLE 型の値の比較に等号(=)を使用しないことをお勧めします。DOUBLE 型の値から別の DOUBLE 型の値を減算し、比較のために絶対値を取得できます。絶対値が無視できる程度であれば、2 つの 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 型のパラメーター値のみを使用できます。日付値と 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=1 AND b=1 を計算し、次に OR 演算を実行します。
a=1 and (b=1 or c=1) -- 最初に b=1 OR c=1 を計算し、次に AND 演算を実行します。