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

MaxCompute:数学関数

最終更新日:Nov 03, 2025

このトピックでは、MaxCompute でサポートされている数学関数について説明します。各関数の構文、パラメーターの説明、および使用例について詳しく説明します。これらの数学関数を使用すると、データ計算やデータ変換など、さまざまな操作を実行できます。

次の表に、MaxCompute SQL でサポートされている数学関数を示します。

関数

機能

ABS

絶対値を計算します。

ACOS

逆余弦を計算します。

ATAN2

expr1/expr2 の逆正接を計算します。

ASIN

逆正弦を計算します。

ATAN

逆正接を計算します。

BIN

バイナリ値を計算します。

BIT_COUNT

指定されたパラメーター value のバイナリ表現における 1 の数を計算します。

CBRT

立方根を計算します。

CEIL

値を切り上げます。

CONV

ある基数の数値を別の基数の数値に変換します。

CORR

ピアソン相関係数を計算します。

COS

余弦を計算します。

COSH

双曲線余弦を計算します。

COT

余接を計算します。

DEGREES

ラジアンを度に変換します。

E

e の値を返します。

EXP

指数値を計算します。

FACTORIAL

階乗を計算します。

FILTER

ARRAY 配列内の要素をフィルター処理します。

FLOOR

値を切り捨てます。

FORMAT_NUMBER

数値を指定されたフォーマットの文字列に変換します。

GREATEST

一連の値を比較し、最大値を返します。

HEX

整数または文字列の 16 進数フォーマットを返します。

ISNAN

式の値が NaN かどうかを確認します。

LEAST

一連の値を比較し、最小値を返します。

LN

自然対数を計算します。

LOG

対数を計算します。

LOG10

常用対数を計算します。

LOG2

二進対数を計算します。

NEGATIVE

式の負の値を返します。

PI

π の値を返します。

POSITIVE

式の値を返します。

POW

べき乗を計算します。

RADIANS

度をラジアンに変換します。

RAND

乱数を返します。

ROUND

指定された小数点以下の桁数に四捨五入された値を返します。

SHIFTLEFT

左シフト値を計算します。

SHIFTRIGHT

右シフト値を計算します。

SHIFTRIGHTUNSIGNED

符号なし右シフト値を計算します。

SIGN

入力パラメーターの符号を返します。

SIN

正弦を計算します。

SINH

双曲線正弦を計算します。

SQRT

平方根を計算します。

TAN

正接を計算します。

TANH

双曲線正接を計算します。

TRUNC

指定された小数点以下の桁数に切り捨てられた値を返します。

UNHEX

16 進数文字列で表される文字列を返します。

WIDTH_BUCKET

指定されたフィールド値が属するバケット番号を返します。

説明

剰余の計算などの計算の詳細については、「算術演算子」をご参照ください。

使用上の注意

MaxCompute V2.0 は追加の関数を提供します。使用する関数に MaxCompute V2.0 データ型エディションでサポートされている新しいデータ型が含まれている場合は、SET 文を実行して MaxCompute V2.0 データ型エディションを有効にする必要があります。新しいデータ型には、TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP、BINARY があります。

  • セッションレベル: MaxCompute V2.0 データ型エディションを使用するには、実行する SQL 文の前に set odps.sql.type.system.odps2=true; を追加し、それらを一緒にコミットして実行する必要があります。

  • プロジェクトレベル: プロジェクトオーナーは、プロジェクトの要件に基づいてプロジェクトの MaxCompute V2.0 データ型エディションを有効にできます。この構成は 10~15 分後に有効になります。プロジェクトレベルで MaxCompute V2.0 データ型エディションを有効にするには、次のコマンドを実行します:

    setproject odps.sql.type.system.odps2=true; 

    setproject の詳細については、「プロジェクト操作」をご参照ください。プロジェクトレベルで MaxCompute V2.0 データ型エディションを有効にする際の注意事項の詳細については、「データ型エディション」をご参照ください。

サンプルデータ

各関数の使用方法を理解しやすくするために、このトピックではソースデータと、そのデータに基づいた例を示します。次のサンプルコマンドは、mf_math_fun_t という名前のテーブルを作成し、そのテーブルにデータを追加します。

create table if not exists mf_math_fun_t(
     int_data     int,
     bigint_data  bigint,
     double_data  double,
     decimal_data decimal,
     float_data   float,
     string_data  string
    );
insert into mf_math_fun_t values
(null, -10, 0.525, 0.525BD, cast(0.525 as float), '10'),
(-20, null, -0.1, -0.1BD, cast(-0.1 as float), '-10'),
(0, -1, null, 20.45BD, cast(-1 as float), '30'),
(-40, 4, 0.89, null, cast(0.89 as float), '-30'),
(5, -50, -1, -1BD, null, '50'),
(-60, 6, 1.5, 1.5BD, cast(1.5 as float), '-50'),
(-1, -70, -7.5, -7.5BD, cast(-7.5 as float),null ),
(-80, 1, -10.2, -10.2BD, cast(-10.2 as float), '-1' ),
(9, -90, 2.58, 2.58BD, cast(2.58 as float), '0'),
(-100, 10, -5.8, -5.8BD, cast(-5.8 as float), '-90');

次のコマンドは、mf_math_fun_t テーブルからデータを照会します:

select * from mf_math_fun_t;
-- 次の結果が返されます。
+----------+-------------+-------------+--------------+------------+-------------+
| int_data | bigint_data | double_data | decimal_data | float_data | string_data |
+----------+-------------+-------------+--------------+------------+-------------+
| NULL     | -10         | 0.525       | 0.525        | 0.525      | 10          |
| -20      | NULL        | -0.1        | -0.1         | -0.1       | -10         |
| 0        | -1          | NULL        | 20.45        | -1         | 30          |
| -40      | 4           | 0.89        | NULL         | 0.89       | -30         |
| 5        | -50         | -1.0        | -1           | NULL       | 50          |
| -60      | 6           | 1.5         | 1.5          | 1.5        | -50         |
| -1       | -70         | -7.5        | -7.5         | -7.5       | NULL        |
| -80      | 1           | -10.2       | -10.2        | -10.2      | -1          |
| 9        | -90         | 2.58        | 2.58         | 2.58       | 0           |
| -100     | 10          | -5.8        | -5.8         | -5.8       | -90         |
+----------+-------------+-------------+--------------+------------+-------------+

ABS

  • 構文

    bigint|double|decimal abs(<number>)
  • 説明

    number の絶対値を計算します。

  • パラメーター

    number: 必須。DOUBLE、BIGINT、または DECIMAL 型の値。入力値が STRING 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

    説明

    入力値が BIGINT 型で、BIGINT の値の範囲を超えている場合、値は DOUBLE 型に変換されます。この変換により、精度が失われる可能性があります。

  • 戻り値

    戻り値のデータ型は、入力パラメーターのデータ型と同じです。次のルールが適用されます:

    • number が DOUBLE、BIGINT、または DECIMAL 型の場合、対応する型の値が返されます。

    • number が STRING 型の場合、DOUBLE 型の値が返されます。

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

    • 静的データの例

      --戻り値は NULL です。
      select abs(null);
      --戻り値は 1 です。
      select abs(-1);
      --戻り値は 1.2 です。
      select abs(-1.2);
      --戻り値は 2.0 です。
      select abs("-2");
      --戻り値は 1.2232083745629837e32 です。
      select abs(122320837456298376592387456923748);
      --tbl1 テーブルの id フィールドの絶対値を計算します。次のコードは、SQL 文で ABS 関数を使用する方法の完全な例を示しています。ウィンドウ関数と集計関数を除く他のビルトイン関数も同様の方法で使用されます。
      select abs(id) from tbl1;
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは絶対値を計算します。

      select abs(bigint_data) as bigint_new, abs(double_data) as double_new, abs(decimal_data) as decimal_new, abs(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +------------+------------+-------------+------------+
      | bigint_new | double_new | decimal_new | string_new |
      +------------+------------+-------------+------------+
      | 10         | 0.525      | 0.525       | 10.0       |
      | NULL       | 0.1        | 0.1         | 10.0       |
      | 1          | NULL       | 20.45       | 30.0       |
      | 4          | 0.89       | NULL        | 30.0       |
      | 50         | 1.0        | 1           | 50.0       |
      | 6          | 1.5        | 1.5         | 50.0       |
      | 70         | 7.5        | 7.5         | NULL       |
      | 1          | 10.2       | 10.2        | 1.0        |
      | 90         | 2.58       | 2.58        | 0.0        |
      | 10         | 5.8        | 5.8         | 90.0       |
      +------------+------------+-------------+------------+

ACOS

  • 構文

    double|decimal acos(<number>)
  • 説明

    number の逆余弦を計算します。

  • パラメーター

    number: 必須。[-1, 1] の範囲の値。値は DOUBLE または DECIMAL 型です。入力値が STRING または BIGINT 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

  • 戻り値

    戻り値のデータ型は、入力パラメーターのデータ型と同じです。値は 0 から π の範囲です。次のルールが適用されます:

    • number が DOUBLE または DECIMAL 型の場合、対応する型の値が返されます。

    • number が STRING または BIGINT 型の場合、DOUBLE 型の値が返されます。

    • number の値が [-1, 1] の範囲にない場合、NULL が返されます。Hive 互換モードでは、NaN が返されます。

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

    • 静的データの例

      --戻り値は 0.5155940062460905 です。
      select acos("0.87");
      --戻り値は 1.5707963267948966 です。
      select acos(0);
      --戻り値は NULL です。
      select acos(null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは逆余弦を計算します。

      select acos(bigint_data) as bigint_new, acos(double_data) as double_new, acos(decimal_data) as decimal_new, acos(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +-------------------+--------------------+--------------------+---------------------+
      | bigint_new        | double_new         | decimal_new        | string_new          |
      +-------------------+--------------------+--------------------+---------------------+
      | NULL              | 1.0180812136981134 | 1.0180812136981134 | NULL                |
      | NULL              | 1.6709637479564565 | 1.6709637479564565 | NULL                |
      | 3.141592653589793 | NULL               | NULL               | NULL                |
      | NULL              | 0.4734511572720662 | NULL               | NULL                |
      | NULL              | 3.141592653589793  | 3.141592653589793  | NULL                |
      | NULL              | NULL               | NULL               | NULL                |
      | NULL              | NULL               | NULL               | NULL                |
      | 0.0               | NULL               | NULL               | 3.141592653589793   |
      | NULL              | NULL               | NULL               | 1.5707963267948966  |
      | NULL              | NULL               | NULL               | NULL                |
      +-------------------+--------------------+--------------------+---------------------+

ATAN2

  • 構文

    double atan2(<expr1>, <expr2>)
  • 説明

    expr1/expr2 の逆正接を計算します。

  • パラメーター

    • expr1: 必須。DOUBLE 型の値。入力値が STRING、BIGINT、または DECIMAL 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

    • expr2: 必須。DOUBLE 型の値。入力値が STRING、BIGINT、または DECIMAL 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

  • 戻り値

    DOUBLE 型の値が返されます。値は -π/2 から π/2 の範囲です。expr1 または expr2 の値が NULL の場合、NULL が返されます。

  • --戻り値は 0.0 です。
    select atan2(0, 0);

ASIN

  • 構文

    double|decimal asin(<number>)
  • 説明

    number の逆正弦を計算します。

  • パラメーター

    number: 必須。[-1, 1] の範囲の値。値は DOUBLE または DECIMAL 型です。入力値が STRING または BIGINT 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

  • 戻り値

    戻り値のデータ型は、入力パラメーターのデータ型と同じです。値は -π/2 から π/2 の範囲です。次のルールが適用されます:

    • number が DOUBLE または DECIMAL 型の場合、対応する型の値が返されます。

    • number が STRING または BIGINT 型の場合、DOUBLE 型の値が返されます。

    • number の値が [-1, 1] の範囲にない場合、NULL が返されます。Hive 互換モードでは、NaN が返されます。

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

    • 静的データの例

      --戻り値は 1.5707963267948966 です。
      select asin(1);
      --戻り値は -1.5707963267948966 です。
      select asin(-1);
      --戻り値は NULL です。
      select asin(null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは逆正弦を計算します。

      select asin(bigint_data) as bigint_new, asin(double_data) as double_new, asin(decimal_data) as decimal_new, asin(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +--------------------+---------------------+---------------------+---------------------+
      | bigint_new         | double_new          | decimal_new         | string_new          |
      +--------------------+---------------------+---------------------+---------------------+
      | NULL               | 0.5527151130967832  | 0.5527151130967832  | NULL                |
      | NULL               | -0.1001674211615598 | -0.1001674211615598 | NULL                |
      | -1.5707963267948966| NULL                | NULL                | NULL                |
      | NULL               | 1.0973451695228305  | NULL                | NULL                |
      | NULL               | -1.5707963267948966 | -1.5707963267948966 | NULL                |
      | NULL               | NULL                | NULL                | NULL                |
      | NULL               | NULL                | NULL                | NULL                |
      | 1.5707963267948966 | NULL                | NULL                | -1.5707963267948966 |
      | NULL               | NULL                | NULL                | 0.0                 |
      | NULL               | NULL                | NULL                | NULL                |
      +--------------------+---------------------+---------------------+---------------------+

ATAN

  • 構文

    double atan(<number>)
  • 説明

    number の逆正接を計算します。

  • パラメーター

    number: 必須。DOUBLE 型の値。入力値が STRING、BIGINT、または DECIMAL 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

  • 戻り値

    DOUBLE 型の値が返されます。値は -π/2 から π/2 の範囲です。number の値が NULL の場合、NULL が返されます。

    • 静的データの例

      --戻り値は 0.7853981633974483 です。
      select atan(1);
      --戻り値は -0.7853981633974483 です。
      select atan(-1);
      --戻り値は NULL です。
      select atan(null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは逆正接を計算します。

      select atan(bigint_data) as bigint_new, atan(double_data) as double_new, atan(decimal_data) as decimal_new, atan(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +---------------------+----------------------+----------------------+---------------------+
      | bigint_new          | double_new           | decimal_new          | string_new          |
      +---------------------+----------------------+----------------------+---------------------+
      | -1.4711276743037347 | 0.483447001567199    | 0.483447001567199    | 1.4711276743037347  |
      | NULL                | -0.09966865249116204 | -0.09966865249116204 | -1.4711276743037347 |
      | -0.7853981633974483 | NULL                 | 1.521935491607842    | 1.5374753309166493  |
      | 1.3258176636680326  | 0.7272626879966904   | NULL                 | -1.5374753309166493 |
      | -1.550798992821746  | -0.7853981633974483  | -0.7853981633974483  | 1.550798992821746   |
      | 1.4056476493802699  | 0.982793723247329    | 0.982793723247329    | -1.550798992821746  |
      | -1.5565115842075    | -1.4382447944982226  | -1.4382447944982226  | NULL                |
      | 0.7853981633974483  | -1.473069419436178   | -1.473069419436178   | -0.7853981633974483 |
      | -1.5596856728972892 | 1.2010277920014796   | 1.2010277920014796   | 0.0                 |
      | 1.4711276743037347  | -1.4000611153196139  | -1.4000611153196139  | -1.5596856728972892 |
      +---------------------+----------------------+----------------------+---------------------+

BIN

  • 構文

    string bin(<number>)
  • 説明

    number のバイナリ表現を返します。これは MaxCompute V2.0 の拡張関数です。

  • パラメーター

    number: 必須。BIGINT、INT、SMALLINT、または TINYINT 型の値。

  • 戻り値

    STRING 型の値が返されます。次のルールが適用されます:

    • number のデータ型が BIGINT、INT、SMALLINT、または TINYINT でない場合、エラーが返されます。

    • number の値が 0 の場合、0 が返されます。

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

    • 静的データの例

      --戻り値は 0 です。
      select bin(0);
      --戻り値は NULL です。
      select bin(null);
      --戻り値は 1100 です。
      select bin(12);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは int_data および bigint_data 列のバイナリ表現を取得します。

      --MaxCompute V2.0 の新しいデータ型を有効にします。このコマンドは SQL 文と一緒に実行する必要があります。
      set odps.sql.type.system.odps2=true;
      select bin(int_data) as int_new, bin(bigint_data) as bigint_new from mf_math_fun_t;

      次の結果が返されます。

      +----------------------------------------------------------------------------+------------------------------------------------------------------+
      | int_new                                                                    | bigint_new                                                       |
      +----------------------------------------------------------------------------+------------------------------------------------------------------+
      | NULL                                                                       | 1111111111111111111111111111111111111111111111111111111111110110 |
      | 1111111111111111111111111111111111111111111111111111111111101100           | NULL                                                             |
      | 0                                                                          | 1111111111111111111111111111111111111111111111111111111111111111 |
      | 1111111111111111111111111111111111111111111111111111111111011000           | 100                                                              |
      | 101                                                                        | 1111111111111111111111111111111111111111111111111111111111001110 |
      | 1111111111111111111111111111111111111111111111111111111111000100           | 110                                                              |
      | 1111111111111111111111111111111111111111111111111111111111111111           | 1111111111111111111111111111111111111111111111111111111110111010 |
      | 1111111111111111111111111111111111111111111111111111111110110000           | 1                                                                |
      | 1001                                                                       | 1111111111111111111111111111111111111111111111111111111110100110 |
      | 1111111111111111111111111111111111111111111111111111111110011100           | 1010                                                             |
      +----------------------------------------------------------------------------+------------------------------------------------------------------+

CBRT

  • 構文

    double cbrt(<number>)
  • 説明

    number の立方根を計算します。これは MaxCompute V2.0 の拡張関数です。

  • パラメーター

    number: 必須。BIGINT、INT、SMALLINT、TINYINT、DOUBLE、FLOAT、または STRING 型の値。

  • 戻り値

    DOUBLE 型の値が返されます。次のルールが適用されます:

    • number のデータ型が BIGINT、INT、SMALLINT、TINYINT、DOUBLE、FLOAT、または STRING でない場合、エラーが返されます。

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

    • 静的データの例

      --戻り値は 2.0 です。
      select cbrt(8);
      --戻り値は NULL です。
      select cbrt(null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは decimal_data を除くすべての列の立方根を取得します。

      --MaxCompute V2.0 の新しいデータ型を有効にします。このコマンドは SQL 文と一緒に実行する必要があります。
      set odps.sql.type.system.odps2=true;
      select cbrt(int_data) as int_new, cbrt(bigint_data) as bigint_new, cbrt(double_data) as double_new, cbrt(float_data) as float_new, cbrt(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +---------------------+---------------------+----------------------+---------------------+---------------------+
      | int_new             | bigint_new          | double_new           | float_new           | string_new          |
      +---------------------+---------------------+----------------------+---------------------+---------------------+
      | NULL                | -2.1544346900318834 | 0.806714323012272    | 0.8067143108004823  | 2.1544346900318834  |
      | -2.7144176165949063 | NULL                | -0.46415888336127786 | -0.46415888566678   | -2.1544346900318834 |
      | 0.0                 | -1.0                | NULL                 | -1.0                | 3.107232505953859   |
      | -3.4199518933533937 | 1.5874010519681996  | 0.9619001716077046   | 0.961900166454112   | -3.107232505953859  |
      | 1.7099759466766968  | -3.6840314986403864 | -1.0                 | NULL                | 3.6840314986403864  |
      | -3.9148676411688634 | 1.8171205928321394  | 1.1447142425533317   | 1.1447142425533317  | -3.6840314986403864 |
      | -1.0                | -4.121285299808557  | -1.9574338205844317  | -1.9574338205844317 | NULL                |
      | -4.308869380063767  | 1.0                 | -2.168702885250197   | -2.1687028717323127 | -1.0                |
      | 2.080083823051904   | -4.481404746557165  | 1.3715339700741747   | 1.3715339565548288  | 0.0                 |
      | -4.641588833612778  | 2.1544346900318834  | -1.7967017791430528  | -1.7967017988380907 | -4.481404746557165  |
      +---------------------+---------------------+----------------------+---------------------+---------------------+

CEIL

  • 構文

    bigint ceil(<value>)
  • 説明

    値を切り上げます。この関数は、入力値 value 以上の最小の整数を返します。

  • パラメーター

    value: 必須。DOUBLE または DECIMAL 型の値。入力値が STRING または BIGINT 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

  • 戻り値

    BIGINT 型の値が返されます。value の値が NULL の場合、NULL が返されます。

    • 静的データの例

      --戻り値は 2 です。
      select ceil(1.1);
      --戻り値は -1 です。
      select ceil(-1.1);
      --戻り値は NULL です。
      select ceil(null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは値を切り上げます。

      select ceil(bigint_data) as bigint_new, ceil(double_data) as double_new, ceil(decimal_data) as decimal_new, ceil(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +------------+------------+-------------+------------+
      | bigint_new | double_new | decimal_new | string_new |
      +------------+------------+-------------+------------+
      | -10        | 1          | 1           | 10         |
      | NULL       | 0          | 0           | -10        |
      | -1         | NULL       | 21          | 30         |
      | 4          | 1          | NULL        | -30        |
      | -50        | -1         | -1          | 50         |
      | 6          | 2          | 2           | -50        |
      | -70        | -7         | -7          | NULL       |
      | 1          | -10        | -10         | -1         |
      | -90        | 3          | 3           | 0          |
      | 10         | -5         | -5          | -90        |
      +------------+------------+-------------+------------+

CONV

  • 構文

    STRING CONV(<input>, BIGINT <from_base>, BIGINT <to_base>)
  • 説明

    この関数は、ある基数の数値を別の基数の数値に変換し、結果を文字列として返します。

  • パラメーター

    パラメーター

    必須

    説明

    input

    はい

    STRING 型の値。

    説明
    • プロジェクトが Hive 互換モードの場合 (つまり、set odps.sql.hive.compatible=true; コマンドを実行した場合)、BIGINT および DOUBLE 値の暗黙的な変換がサポートされます。

    • プロジェクトが Hive 互換モードでない場合 (つまり、set odps.sql.hive.compatible=false; コマンドを実行した場合)、BIGINT および DOUBLE 値の暗黙的な変換はサポートされません。

    from_base

    はい

    基数値は、2、8、10、または 16 の 10 進整数である必要があります。暗黙的な型変換はサポートされていません。

    to_base

    はい

    基数値は、2、8、10、または 16 の 10 進整数である必要があります。暗黙的な型変換はサポートされていません。

  • 戻り値

    STRING 型の値が返されます。次のルールが適用されます:

    • inputfrom_base、または to_base の値が NULL の場合、NULL が返されます。

    • 変換は 64 ビット精度で実行されます。オーバーフローが発生した場合、NULL が返されます。

    • 入力値 input が BIGINT または DOUBLE 型の場合、暗黙的な変換がサポートされていないため、非 Hive 互換モードでは NULL が返されます。

    • 入力値 input が負の値の場合、非 Hive 互換モードでは NULL が返されます。Hive 互換モードでは、0 が返されます。

    • 入力値 input が 10 進数の場合、非 Hive 互換モードでは NULL が返されます。Hive 互換モードでは、値は整数に変換されてから指定された基数に変換されます。小数部分は破棄されます。

    • 静的データの例

      --戻り値は 12 です。
      SELECT CONV('1100', 2, 10);
      --戻り値は C です。
      SELECT CONV('1100', 2, 16);
      --戻り値は 171 です。
      SELECT CONV('ab', 16, 10);
      --戻り値は AB です。
      SELECT CONV('ab', 16, 16);
      --戻り値は NULL です。
      SELECT CONV('1100', null, 10);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは値をバイナリ形式に変換します。

      SELECT CONV(bigint_data,10,2) AS bigint_new, CONV(double_data,10,2) AS double_new, CONV(decimal_data,10,2) AS decimal_new, CONV(string_data,10,2) AS string_new FROM mf_math_fun_t;

      次の結果が返されます。

      +------------+------------+-------------+------------+
      | bigint_new | double_new | decimal_new | string_new |
      +------------+------------+-------------+------------+
      | NULL       | 0          | 0           | 1010       |
      | NULL       | NULL       | NULL        | NULL       |
      | NULL       | NULL       | 10100       | 11110      |
      | 100        | 0          | NULL        | NULL       |
      | NULL       | NULL       | NULL        | 110010     |
      | 110        | 1          | 1           | NULL       |
      | NULL       | NULL       | NULL        | NULL       |
      | 1          | NULL       | NULL        | NULL       |
      | NULL       | 10         | 10          | 0          |
      | 1010       | NULL       | NULL        | NULL       |
      +------------+------------+-------------+------------+

CORR

  • 構文

    double corr(<col1>, <col2>)
  • 説明

    2 つのデータ列のピアソン相関係数を計算します。これは MaxCompute V2.0 の拡張関数です。

  • パラメーター

    col1 および col2: 必須。ピアソン相関係数を計算するテーブル内の 2 つの列の名前。列は、DOUBLE、BIGINT、INT、SMALLINT、TINYINT、FLOAT、または DECIMAL 型である必要があります。col1col2 のデータ型は異なっていてもかまいません。

  • 戻り値

    DOUBLE 型の値が返されます。入力列の行に NULL 値が含まれている場合、その行は計算に使用されません。

  • サンプルデータ に基づいて、次のコマンドは double_data および float_data 列のピアソン相関係数を計算します。

    select corr(double_data,float_data) from mf_math_fun_t;

    戻り値は 1.0 です。

COS

  • 構文

    double|decimal cos(<number>)
  • 説明

    number の余弦を計算します。入力値はラジアン単位です。

  • パラメーター

    number: 必須。DOUBLE または DECIMAL 型の値。入力値が STRING または BIGINT 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

  • 戻り値

    DOUBLE または DECIMAL 型の値が返されます。次のルールが適用されます:

    • number が DOUBLE または DECIMAL 型の場合、対応する型の値が返されます。

    • number が STRING または BIGINT 型の場合、DOUBLE 型の値が返されます。

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

    • 静的データの例

      --戻り値は 2.6794896585028633e-8 です。
      select cos(3.1415926/2);
      --戻り値は -0.9999999999999986 です。
      select cos(3.1415926);
      --戻り値は NULL です。
      select cos(null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは余弦を計算します。

      select cos(bigint_data) as bigint_new, cos(double_data) as double_new, cos(decimal_data) as decimal_new, cos(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +---------------------+--------------------+----------------------+---------------------+
      | bigint_new          | double_new         | decimal_new          | string_new          |
      +---------------------+--------------------+----------------------+---------------------+
      | -0.8390715290764524 | 0.8653239416229412 | 0.8653239416229412   | -0.8390715290764524 |
      | NULL                | 0.9950041652780258 | 0.9950041652780258   | -0.8390715290764524 |
      | 0.5403023058681398  | NULL               | -0.02964340851507803 | 0.15425144988758405 |
      | -0.6536436208636119 | 0.6294120265736969 | NULL                 | 0.15425144988758405 |
      | 0.9649660284921133  | 0.5403023058681398 | 0.5403023058681398   | 0.9649660284921133  |
      | 0.960170286650366   | 0.0707372016677029 | 0.0707372016677029   | 0.9649660284921133  |
      | 0.6333192030862999  | 0.3466353178350258 | 0.3466353178350258   | NULL                |
      | 0.5403023058681398  | -0.7142656520272003| -0.7142656520272003  | 0.5403023058681398  |
      | -0.4480736161291701 | -0.8464080412157756| -0.8464080412157756  | 1.0                 |
      | -0.8390715290764524 | 0.8855195169413189 | 0.8855195169413189   | -0.4480736161291701 |
      +---------------------+--------------------+----------------------+---------------------+

COSH

  • 構文

    double|decimal cosh(<number>)
  • 説明

    number の双曲線余弦を計算します。

  • パラメーター

    number: 必須。DOUBLE または DECIMAL 型の値。入力値が STRING または BIGINT 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

  • 戻り値

    DOUBLE または DECIMAL 型の値が返されます。次のルールが適用されます:

    • number が DOUBLE または DECIMAL 型の場合、対応する型の値が返されます。

    • number が STRING または BIGINT 型の場合、DOUBLE 型の値が返されます。

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

    • 静的データの例

      --戻り値は 2.5091784169949913 です。
      select cosh(3.1415926/2);
      --戻り値は NULL です。
      select cosh(null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは双曲線余弦を計算します。

      select cosh(bigint_data) as bigint_new, cosh(double_data) as double_new, cosh(decimal_data) as decimal_new, cosh(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +-----------------------+--------------------+--------------------+----------------------+
      | bigint_new            | double_new         | decimal_new        | string_new           |
      +-----------------------+--------------------+--------------------+----------------------+
      | 11013.232920103324    | 1.1410071063729532 | 1.1410071063729532 | 11013.232920103324   |
      | NULL                  | 1.0050041680558035 | 1.0050041680558035 | 11013.232920103324   |
      | 1.5430806348152437    | NULL               | 380445243.96844625 | 5343237290762.231    |
      | 27.308232836016487    | 1.42289270202111   | NULL               | 5343237290762.231    |
      | 2.592352764293536e21  | 1.5430806348152437 | 1.5430806348152437 | 2.592352764293536e21 |
      | 201.7156361224559     | 2.352409615243247  | 2.352409615243247  | 2.592352764293536e21 |
      | 1.2577193354595834e30 | 904.0214837702166  | 904.0214837702166  | NULL                 |
      | 1.5430806348152437    | 13451.593055733929 | 13451.593055733929 | 1.5430806348152437   |
      | 6.102016471589204e38  | 6.636456081840602  | 6.636456081840602  | 1.0                  |
      | 11013.232920103324    | 165.151293732197   | 165.151293732197   | 6.102016471589204e38 |
      +-----------------------+--------------------+--------------------+----------------------+

COT

  • 構文

    double|decimal cot(<number>)
  • 説明

    number の余接を計算します。入力値はラジアン単位です。

  • パラメーター

    number: 必須。DOUBLE または DECIMAL 型の値。入力値が STRING または BIGINT 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

  • 戻り値

    DOUBLE または DECIMAL 型の値が返されます。次のルールが適用されます:

    • number が DOUBLE または DECIMAL 型の場合、対応する型の値が返されます。

    • number が STRING または BIGINT 型の場合、DOUBLE 型の値が返されます。

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

    • 静的データの例

      --戻り値は 2.6794896585028643E-8 です。
      select cot(3.1415926/2);
      --戻り値は NULL です。
      select cot(null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは余接を計算します。

      select cot(bigint_data) as bigint_new, cot(double_data) as double_new, cot(decimal_data) as decimal_new, cot(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +-----------------------+---------------------+---------------------+----------------------+
      | bigint_new            | double_new          | decimal_new         | string_new           |
      +-----------------------+---------------------+---------------------+----------------------+
      | -1.54235104535692     | 1.7264594764178474  | 1.7264594764178474  | 1.54235104535692     |
      | NULL                  | -9.966644423259238  | -9.966644423259238  | -1.54235104535692    |
      | -0.6420926159343308   | NULL                | -0.02965644140592836| -0.15611995216165922 |
      | 0.8636911544506167    | 0.8099792954471944  | NULL                | 0.15611995216165922  |
      | 3.6778144508505695    | -0.6420926159343308 | -0.6420926159343308 | -3.6778144508505695  |
      | -3.436353004180128    | 0.07091484430265245 | 0.07091484430265245 | 3.6778144508505695   |
      | -0.8183574478651038   | -0.36954725630901636| -0.36954725630901636| NULL                 |
      | 0.6420926159343308    | -1.0205622016180353 | -1.0205622016180353 | -0.6420926159343308  |
      | 0.5012027833801532    | -1.5893944776331337 | -1.5893944776331337 | 1.0                  |
      | 1.54235104535692      | 1.9059736612916494  | 1.9059736612916494  | 0.5012027833801532   |
      +-----------------------+---------------------+---------------------+----------------------+

DEGREES

  • 構文

    double degrees(<number>) 
  • 説明

    値をラジアンから度に変換します。

  • パラメーター

    number: 必須。DOUBLE、BIGINT、INT、SMALLINT、TINYINT、FLOAT、DECIMAL、または STRING 型の値。これは MaxCompute V2.0 の拡張関数です。

  • 戻り値

    DOUBLE 型の値が返されます。number の値が NULL の場合、NULL が返されます。

    • 静的データの例

      --戻り値は 90.0 です。
      select degrees(1.5707963267948966);
      --戻り値は 0.0 です。
      select degrees(0);
      --戻り値は NULL です。
      select degrees(null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドはすべての列に対応する度を取得します。

      --MaxCompute V2.0 の新しいデータ型を有効にします。このコマンドは SQL 文と一緒に実行する必要があります。
      set odps.sql.type.system.odps2=true;
      select degrees(int_data) as int_new, degrees(bigint_data) as bigint_new, degrees(double_data) as double_new, degrees(decimal_data) as decimal_new, degrees(float_data) as float_new, degrees(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
      | int_new             | bigint_new          | double_new          | decimal_new         | float_new           | string_new          |
      +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
      | NULL                | -572.9577951308232  | 30.08028424436822   | 30.08028424436822   | 30.080282878330387  | 572.9577951308232   |
      | -1145.9155902616465 | NULL                | -5.729577951308232  | -5.729577951308232  | -5.729578036685597  | -572.9577951308232  |
      | 0.0                 | -57.29577951308232  | NULL                | 1171.6986910425335  | -57.29577951308232  | 1718.8733853924698  |
      | -2291.831180523293  | 229.1831180523293   | 50.99324376664326   | NULL                | 50.99324294702057   | -1718.8733853924698 |
      | 286.4788975654116   | -2864.7889756541163 | -57.29577951308232  | -57.29577951308232  | NULL                | 2864.7889756541163  |
      | -3437.7467707849396 | 343.77467707849394  | 85.94366926962348   | 85.94366926962348   | 85.94366926962348   | -2864.7889756541163 |
      | -57.29577951308232  | -4010.7045659157625 | -429.71834634811745 | -429.71834634811745 | -429.71834634811745 | NULL                |
      | -4583.662361046586  | 57.29577951308232   | -584.4169510334397  | -584.4169510334397  | -584.416940105137   | -57.29577951308232  |
      | 515.662015617741    | -5156.620156177409  | 147.8231111437524   | 147.8231111437524   | 147.82310677243132  | 0.0                 |
      | -5729.5779513082325 | 572.9577951308232   | -332.31552117587745 | -332.31552117587745 | -332.31553210418014 | -5156.620156177409  |
      +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+

E

  • 構文

    double e()
  • 説明

    e の値を返します。これは MaxCompute V2.0 の拡張関数です。

  • 戻り値

    DOUBLE 型の値が返されます。

  • --戻り値は 2.718281828459045 です。
    select e();

EXP

  • 構文

    double|decimal exp(<number>)
  • 説明

    number の指数値を計算します。

  • パラメーター

    number: 必須。DOUBLE または DECIMAL 型の値。入力値が STRING または BIGINT 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

  • 戻り値

    DOUBLE または DECIMAL 型の値が返されます。次のルールが適用されます:

    • number が DOUBLE または DECIMAL 型の場合、対応する型の値が返されます。

    • number が STRING または BIGINT 型の場合、DOUBLE 型の値が返されます。

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

    • 静的データの例

      --戻り値は 4.810477252069109 です。
      select exp(3.1415926/2);
      --戻り値は NULL です。
      select exp(null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは指数値を計算します。

      select exp(bigint_data) as bigint_new, exp(double_data) as double_new, exp(decimal_data) as decimal_new, exp(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +-------------------------+-------------------------+-------------------------+-------------------------+
      | bigint_new              | double_new              | decimal_new             | string_new              |
      +-------------------------+-------------------------+-------------------------+-------------------------+
      | 0.000045399929762484854 | 1.6904588483790914      | 1.6904588483790914      | 22026.465794806718      |
      | NULL                    | 0.9048374180359595      | 0.9048374180359595      | 0.000045399929762484854 |
      | 0.36787944117144233     | NULL                    | 760890487.9368925       | 10686474581524.463      |
      | 54.598150033144236      | 2.4351296512898744      | NULL                    | 9.357622968840175e-14   |
      | 1.9287498479639178e-22  | 0.36787944117144233     | 0.36787944117144233     | 5.184705528587072e21    |
      | 403.4287934927351       | 4.4816890703380645      | 4.4816890703380645      | 1.9287498479639178e-22  |
      | 3.975449735908647e-31   | 0.0005530843701478336   | 0.0005530843701478336   | NULL                    |
      | 2.718281828459045       | 0.000037170318684126734 | 0.000037170318684126734 | 0.36787944117144233     |
      | 8.194012623990515e-40   | 13.197138159658358      | 13.197138159658358      | 1.0                     |
      | 22026.465794806718      | 0.0030275547453758153   | 0.0030275547453758153   | 8.194012623990515e-40   |
      +-------------------------+-------------------------+-------------------------+-------------------------+

FACTORIAL

  • 構文

    bigint factorial(<number>)
  • 説明

    number の階乗を返します。これは MaxCompute V2.0 の拡張関数です。

  • パラメーター

    number: 必須。BIGINT、INT、SMALLINT、または TINYINT 型の値。値は [0, 20] の範囲である必要があります。

  • 戻り値

    BIGINT 型の値が返されます。次のルールが適用されます:

    • number の値が 0 の場合、1 が返されます。

    • number の値が NULL または [0, 20] の範囲にない場合、NULL が返されます。

    • 静的データの例

      --戻り値は 120 です。5! = 5 × 4 × 3 × 2 × 1 = 120
      select factorial(5); 
      --戻り値は 1 です。
      select factorial(0); 
      --戻り値は NULL です。
      select factorial(null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは int_data および bigint_data 列の階乗を計算します。

      --MaxCompute V2.0 の新しいデータ型を有効にします。このコマンドは SQL 文と一緒に実行する必要があります。
      set odps.sql.type.system.odps2=true;
      select factorial(int_data) as int_new, factorial(bigint_data) as bigint_new from mf_math_fun_t;

      次の結果が返されます。

      +------------+------------+
      | int_new    | bigint_new |
      +------------+------------+
      | NULL       | NULL       |
      | NULL       | NULL       |
      | 1          | NULL       |
      | NULL       | 24         |
      | 120        | NULL       |
      | NULL       | 720        |
      | NULL       | NULL       |
      | NULL       | 1          |
      | 362880     | NULL       |
      | NULL       | 3628800    |
      +------------+------------+

FILTER

  • 構文

    array<T> filter(array<T> <a>, function<T,boolean> <func>)
  • パラメーター

    • a: 必須。このパラメーターは配列を指定します。Tarray<T> 内の要素のデータの型を指定します。要素は任意のデータの型にすることができます。

    • func: 必須。このパラメーターは、配列 a の要素をフィルター処理するために使用されるビルトイン関数、ユーザー定義関数、または式を指定します。値は、配列 a の要素と同じデータ型である必要があります。関数または式の出力結果は BOOLEAN 型です。

  • 戻り値

    ARRAY 型の値が返されます。

  • -- 戻り値は [2, 3] です。
    select filter(array(1, 2, 3), x -> x > 1);
    説明

    この例では、ハイフンと閉じる山括弧の組み合わせ (->) が使用されています。Lambda 関数でハイフンと閉じる山括弧の組み合わせ (->) を使用する方法の詳細については、「Lambda 関数」をご参照ください。

FLOOR

  • 構文

    bigint floor(<number>)
  • 説明

    値を切り捨てます。この関数は、number 以下の最大の整数を返します。

  • パラメーター

    number: 必須。DOUBLE または DECIMAL 型の値。入力値が STRING または BIGINT 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

  • 戻り値

    BIGINT 型の値が返されます。number の値が NULL の場合、NULL が返されます。

    • 静的データの例

      --戻り値は 1 です。
      select floor(1.2);
      --戻り値は 0 です。
      select floor(0.1);
      --戻り値は -2 です。
      select floor(-1.2);
      --戻り値は -1 です。
      select floor(-0.1);
      --戻り値は 0 です。
      select floor(0.0);
      --戻り値は 0 です。
      select floor(-0.0);
      --戻り値は NULL です。
      select floor(null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは値を切り捨てます。

      select floor(bigint_data) as bigint_new, floor(double_data) as double_new, floor(decimal_data) as decimal_new, floor(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +------------+------------+-------------+------------+
      | bigint_new | double_new | decimal_new | string_new |
      +------------+------------+-------------+------------+
      | -10        | 0          | 0           | 10         |
      | NULL       | -1         | -1          | -10        |
      | -1         | NULL       | 20          | 30         |
      | 4          | 0          | NULL        | -30        |
      | -50        | -1         | -1          | 50         |
      | 6          | 1          | 1           | -50        |
      | -70        | -8         | -8          | NULL       |
      | 1          | -11        | -11         | -1         |
      | -90        | 2          | 2           | 0          |
      | 10         | -6         | -6          | -90        |
      +------------+------------+-------------+------------+

FORMAT_NUMBER

  • 構文

    string format_number(float|double|decimal <expr1>, <expr2>)
  • 説明

    数値を指定されたフォーマットの文字列に変換します。これは MaxCompute V2.0 の拡張関数です。

  • パラメーター

    • expr1: 必須。フォーマットするデータ。値は、DOUBLE、BIGINT、INT、SMALLINT、TINYINT、FLOAT、DECIMAL、または STRING 型にすることができます。

    • expr2: 必須。変換先のフォーマット。保持する小数点以下の桁数を指定できます。また、#,###,###.## などのフォーマット記述を指定することもできます。

  • 戻り値

    STRING 型の値が返されます。次のルールが適用されます:

    • expr2 > 0 の場合、値は指定された小数点以下の桁数に四捨五入されます。

    • expr2 = 0 の場合、小数点または小数部分は含まれません。

    • expr2 < 0 または expr2 > 340 の場合、エラーが返されます。

    • expr1 または expr2 の値が NULL の場合、NULL が返されます。

    • 静的データの例

      --戻り値は 5.230 です。
      select format_number(5.230134523424545456,3);
      --戻り値は 12,332.123 です。
      select format_number(12332.123456, '#,###,###,###.###');
      --戻り値は NULL です。
      select format_number(null,3);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドはすべての列に対して指定された小数点以下の桁数を保持します。

      --MaxCompute V2.0 の新しいデータ型を有効にします。このコマンドは SQL 文と一緒に実行する必要があります。
      set odps.sql.type.system.odps2=true;
      select format_number(int_data, 1) as int_new, format_number(bigint_data, 1) as bigint_new, format_number(double_data, 2) as double_new, format_number(decimal_data, 1) as decimal_new, format_number(float_data, 0) as float_new, format_number(string_data, 1) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +---------+------------+------------+-------------+-----------+------------+
      | int_new | bigint_new | double_new | decimal_new | float_new | string_new |
      +---------+------------+------------+-------------+-----------+------------+
      | NULL    | -10.0      | 0.53       | 0.5         | 1         | 10.0       |
      | -20.0   | NULL       | -0.10      | -0.1        | -0        | -10.0      |
      | 0.0     | -1.0       | NULL       | 20.5        | -1        | 30.0       |
      | -40.0   | 4.0        | 0.89       | NULL        | 1         | -30.0      |
      | 5.0     | -50.0      | -1.00      | -1.0        | NULL      | 50.0       |
      | -60.0   | 6.0        | 1.50       | 1.5         | 2         | -50.0      |
      | -1.0    | -70.0      | -7.50      | -7.5        | -8        | NULL       |
      | -80.0   | 1.0        | -10.20     | -10.2       | -10       | -1.0       |
      | 9.0     | -90.0      | 2.58       | 2.6         | 3         | 0.0        |
      | -100.0  | 10.0       | -5.80      | -5.8        | -6        | -90.0      |
      +---------+------------+------------+-------------+-----------+------------+

HEX

  • 構文

    string hex(<number>) 
  • 説明

    数値を 16 進数フォーマットに変換します。これは MaxCompute V2.0 の拡張関数です。

  • パラメーター

    number: 必須。DOUBLE、BIGINT、INT、SMALLINT、TINYINT、FLOAT、DECIMAL、または STRING 型の値。

  • 戻り値

    STRING 型の値が返されます。次のルールが適用されます:

    • number の値が 0 または NULL でない場合、STRING 型の値が返されます。

    • number の値が 0 の場合、0 が返されます。

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

    • 静的データの例

      --戻り値は 0 です。
      select hex(0);
      --戻り値は 616263 です。
      select hex('abc');
      --戻り値は 11 です。
      select hex(17);
      --戻り値は 3137 です。
      select hex('17');
      --エラーが返されます。
      select hex(null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドはすべての列を 16 進数フォーマットに変換します。

      --MaxCompute V2.0 の新しいデータ型を有効にします。このコマンドは SQL 文と一緒に実行する必要があります。
      set odps.sql.type.system.odps2=true;
      select hex(int_data) as int_new, hex(bigint_data) as bigint_new, hex(double_data) as double_new, hex(decimal_data) as decimal_new, hex(float_data) as float_new, hex(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +------------------+------------------+------------+-------------+------------+------------+
      | int_new          | bigint_new       | double_new | decimal_new | float_new  | string_new |
      +------------------+------------------+------------+-------------+------------+------------+
      | NULL             | FFFFFFFFFFFFFFF6 | 302E353235 | 302E353235  | 302E353235 | 3130       |
      | FFFFFFFFFFFFFFEC | NULL             | 2D302E31   | 2D302E31    | 2D302E31   | 2D3130     |
      | 0                | FFFFFFFFFFFFFFFF | NULL       | 32302E3435  | 2D31       | 3330       |
      | FFFFFFFFFFFFFFD8 | 4                | 302E3839   | NULL        | 302E3839   | 2D3330     |
      | 5                | FFFFFFFFFFFFFFCE | 2D312E30   | 2D31        | NULL       | 3530       |
      | FFFFFFFFFFFFFFC4 | 6                | 312E35     | 312E35      | 312E35     | 2D3530     |
      | FFFFFFFFFFFFFFFF | FFFFFFFFFFFFFFBA | 2D372E35   | 2D372E35    | 2D372E35   | NULL       |
      | FFFFFFFFFFFFFFB0 | 1                | 2D31302E32 | 2D31302E32  | 2D31302E32 | 2D31       |
      | 9                | FFFFFFFFFFFFFFA6 | 322E3538   | 322E3538    | 322E3538   | 30         |
      | FFFFFFFFFFFFFF9C | A                | 2D352E38   | 2D352E38    | 2D352E38   | 2D3930     |
      +------------------+------------------+------------+-------------+------------+------------+

ISNAN

  • 構文

    boolean isnan(<expr>)
  • 説明

    expr の値が NaN かどうかを確認します。

  • パラメーター

    expr: 必須。DOUBLE 型の値。入力値が STRING、BIGINT、または DECIMAL 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

  • 戻り値

    • expr の値が NaN の場合、True が返されます。それ以外の場合は、False が返されます。

    • expr の値が NULL の場合、False が返されます。

  • --戻り値は False です。
    SELECT isnan(100.1);

LN

  • 構文

    double|decimal ln(<number>)
  • 説明

    number の自然対数を計算します。

  • パラメーター

    number: 必須。DOUBLE または DECIMAL 型の値。入力値が STRING または BIGINT 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

  • 戻り値

    DOUBLE または DECIMAL 型の値が返されます。次のルールが適用されます:

    • number が DOUBLE または DECIMAL 型の場合、対応する型の値が返されます。

    • number が STRING または BIGINT 型の場合、DOUBLE 型の値が返されます。

    • number の値が負の数または 0 の場合、NULL が返されます。

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

    • 静的データの例

      --戻り値は 1.144729868791239 です。
      select ln(3.1415926);
      --戻り値は NULL です。
      select ln(null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは自然対数を計算します。

      select ln(bigint_data) as bigint_new, ln(double_data) as double_new, ln(decimal_data) as decimal_new, ln(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +--------------------+----------------------+---------------------+---------------------+
      | bigint_new         | double_new           | decimal_new         | string_new          |
      +--------------------+----------------------+---------------------+---------------------+
      | NULL               | -0.6443570163905132  | -0.6443570163905132 | 2.302585092994046   |
      | NULL               | NULL                 | NULL                | NULL                |
      | NULL               | NULL                 | 3.017982882488811   | 3.4011973816621555  |
      | 1.3862943611198906 | -0.11653381625595151 | NULL                | NULL                |
      | NULL               | NULL                 | NULL                | 3.912023005428146   |
      | 1.791759469228055  | 0.4054651081081644   | 0.4054651081081644  | NULL                |
      | NULL               | NULL                 | NULL                | NULL                |
      | 0.0                | NULL                 | NULL                | NULL                |
      | NULL               | 0.9477893989335261   | 0.9477893989335261  | NULL                |
      | 2.302585092994046  | NULL                 | NULL                | NULL                |
      +--------------------+----------------------+---------------------+---------------------+

LOG

  • 構文

    double log(<base>, <x>)
  • 説明

    base を底とする x の対数を計算します。

  • パラメーター

    • base: 必須。底。DOUBLE または DECIMAL 型の値。入力値が STRING または BIGINT 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

    • x: 必須。対数を計算する値。DOUBLE または DECIMAL 型の値。入力値が STRING または BIGINT 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

  • 戻り値

    DOUBLE 型の値が返されます。次のルールが適用されます:

    • base または x の値が NULL の場合、NULL が返されます。

    • base または x の値が負の数または 0 の場合、NULL が返されます。

    • base の値が 1 の場合、ゼロ除算エラーが発生するため、NULL が返されます。

    • 静的データの例

      --戻り値は 4.0 です。
      select log(2, 16);
      --戻り値は NULL です。
      select log(2, null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは列の 2 を底とする対数を計算します。

      select log(2,bigint_data) as bigint_new, log(2,double_data) as double_new, log(2,decimal_data) as decimal_new, log(2,string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +--------------------+----------------------+--------------------+--------------------+
      | bigint_new         | double_new           | decimal_new        | string_new         |
      +--------------------+----------------------+--------------------+--------------------+
      | NULL               | -0.929610672108602   | -0.929610672108602 | 3.3219280948873626 |
      | NULL               | NULL                 | NULL               | NULL               |
      | NULL               | NULL                 | 4.354028938054387  | 4.906890595608519  |
      | 2.0                | -0.16812275880832692 | NULL               | NULL               |
      | NULL               | NULL                 | NULL               | 5.643856189774724  |
      | 2.584962500721156  | 0.5849625007211562   | 0.5849625007211562 | NULL               |
      | NULL               | NULL                 | NULL               | NULL               |
      | 0.0                | NULL                 | NULL               | NULL               |
      | NULL               | 1.3673710656485296   | 1.3673710656485296 | NULL               |
      | 3.3219280948873626 | NULL                 | NULL               | NULL               |
      +--------------------+----------------------+--------------------+--------------------+

LOG10

  • 構文

    double log10(<number>)
  • 説明

    number の 10 を底とする対数を返します。これは MaxCompute V2.0 の拡張関数です。

  • パラメーター

    number: 必須。DOUBLE、BIGINT、INT、SMALLINT、TINYINT、FLOAT、DECIMAL、または STRING 型の値。

  • 戻り値

    DOUBLE 型の値が返されます。number の値が 0、負の数、または NULL の場合、NULL が返されます。

    • 静的データの例

      --戻り値は NULL です。
      select log10(null);
      --戻り値は NULL です。
      select log10(0);
      --戻り値は 0.9030899869919435 です。
      select log10(8);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドはすべての列の 10 を底とする対数を計算します。

      --MaxCompute V2.0 の新しいデータ型を有効にします。このコマンドは SQL 文と一緒に実行する必要があります。
      set odps.sql.type.system.odps2=true;
      select log10(int_data) as int_new, log10(bigint_data) as bigint_new, log10(double_data) as double_new, log10(decimal_data) as decimal_new, log10(float_data) as float_new, log10(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +--------------------+--------------------+---------------------+---------------------+-----------------------+--------------------+
      | int_new            | bigint_new         | double_new          | decimal_new         | float_new             | string_new         |
      +--------------------+--------------------+---------------------+---------------------+-----------------------+--------------------+
      | NULL               | NULL               | -0.2798406965940431 | -0.2798406965940431 | -0.27984071631668606  | 1.0                |
      | NULL               | NULL               | NULL                | NULL                | NULL                  | NULL               |
      | NULL               | NULL               | NULL                | 1.3106933123433606  | NULL                  | 1.4771212547196624 |
      | NULL               | 0.6020599913279623 | -0.0506099933550872 | NULL                | -0.050610000335573106 | NULL               |
      | 0.6989700043360187 | NULL               | NULL                | NULL                | NULL                  | 1.6989700043360185 |
      | NULL               | 0.7781512503836435 | 0.17609125905568124 | 0.17609125905568124 | 0.17609125905568124   | NULL               |
      | NULL               | NULL               | NULL                | NULL                | NULL                  | NULL               |
      | NULL               | 0.0                | NULL                | NULL                | NULL                  | NULL               |
      | 0.9542425094393249 | NULL               | 0.4116197059632301  | 0.4116197059632301  | 0.411619693120579     | NULL               |
      | NULL               | 1.0                | NULL                | NULL                | NULL                  | NULL               |
      +--------------------+--------------------+---------------------+---------------------+-----------------------+--------------------+

LOG2

  • 構文

    double log2(<number>)
  • 説明

    number の 2 を底とする対数を返します。これは MaxCompute V2.0 の拡張関数です。

  • パラメーター

    number: 必須。DOUBLE、BIGINT、INT、SMALLINT、TINYINT、FLOAT、DECIMAL、または STRING 型の値。

  • 戻り値

    DOUBLE 型の値が返されます。number の値が 0、負の数、または NULL の場合、NULL が返されます。

    • 静的データの例

      --戻り値は NULL です。
      select log2(null);
      --戻り値は NULL です。
      select log2(0);
      --戻り値は 3.0 です。
      select log2(8);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドはすべての列の 2 を底とする対数を計算します。

      --MaxCompute V2.0 の新しいデータ型を有効にします。このコマンドは SQL 文と一緒に実行する必要があります。
      set odps.sql.type.system.odps2=true;
      select log2(int_data) as int_new, log2(bigint_data) as bigint_new, log2(double_data) as double_new, log2(decimal_data) as decimal_new, log2(float_data) as float_new, log2(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +--------------------+--------------------+----------------------+--------------------+----------------------+--------------------+
      | int_new            | bigint_new         | double_new           | decimal_new        | float_new            | string_new         |
      +--------------------+--------------------+----------------------+--------------------+----------------------+--------------------+
      | NULL               | NULL               | -0.929610672108602   | -0.929610672108602 | -0.9296107376258038  | 3.3219280948873626 |
      | NULL               | NULL               | NULL                 | NULL               | NULL                 | NULL               |
      | NULL               | NULL               | NULL                 | 4.354028938054387  | NULL                 | 4.906890595608519  |
      | NULL               | 2.0                | -0.16812275880832692 | NULL               | -0.16812278199699915 | NULL               |
      | 2.321928094887362  | NULL               | NULL                 | NULL               | NULL                 | 5.643856189774724  |
      | NULL               | 2.584962500721156  | 0.5849625007211562   | 0.5849625007211562 | 0.5849625007211562   | NULL               |
      | NULL               | NULL               | NULL                 | NULL               | NULL                 | NULL               |
      | NULL               | 0.0                | NULL                 | NULL               | NULL                 | NULL               |
      | 3.1699250014423126 | NULL               | 1.3673710656485296   | 1.3673710656485296 | 1.367371022986166    | NULL               |
      | NULL               | 3.3219280948873626 | NULL                 | NULL               | NULL                 | NULL               |
      +--------------------+--------------------+----------------------+--------------------+----------------------+--------------------+

NEGATIVE

  • 構文

    TINYINT|SMALLINT|INT|BIGINT|DOUBLE|DECIMAL negative(TINYINT|SMALLINT|INT|BIGINT|DOUBLE|DECIMAL <expr>)
  • 説明

    expr の負の値を返します。

  • パラメーター

    expr: 必須。入力式。値は、TINYINT、SMALLINT、INT、BIGINT、DOUBLE、または DECIMAL 型にすることができます。

  • 戻り値

    expr 式の負の値を返します。

  • --戻り値は -1 です。
    SELECT negative(1);

PI

  • 構文

    double pi()
  • 説明

    π の値を返します。これは MaxCompute V2.0 の拡張関数です。

  • 戻り値

    DOUBLE 型の値が返されます。

  • --戻り値は 3.141592653589793 です。
    select pi();

POSITIVE

  • 構文

    TINYINT|SMALLINT|INT|BIGINT|DOUBLE|DECIMAL positive(TINYINT|SMALLINT|INT|BIGINT|DOUBLE|DECIMAL <expr>)
  • 説明

    expr の値を返します。

  • パラメーター

    expr: 必須。入力式。値は、TINYINT、SMALLINT、INT、BIGINT、DOUBLE、または DECIMAL 型にすることができます。

  • 戻り値

    expr 式の値を返します。

  • --戻り値は 1 です。
    SELECT positive(1);

POW

  • 構文

    double|decimal pow(<x>, <y>)
  • 説明

    xy 乗の値、つまり x^y を計算します。

  • パラメーター

    • x: 必須。DOUBLE または DECIMAL 型の値。入力値が STRING または BIGINT 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

    • y: 必須。DOUBLE または DECIMAL 型の値。入力値が STRING または BIGINT 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

  • 戻り値

    DOUBLE または DECIMAL 型の値が返されます。次のルールが適用されます:

    • x または y が DOUBLE または DECIMAL 型の場合、対応する型の値が返されます。

    • x または y が STRING または BIGINT 型の場合、DOUBLE 型の値が返されます。

    • x または y の値が NULL の場合、NULL が返されます。

    • 静的データの例

      --戻り値は 65536.0 です。
      select pow(2, 16);
      --戻り値は NULL です。
      select pow(2, null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは列の値を 2 乗した値を計算します。

      select pow(bigint_data, 2) as bigint_new, pow(double_data, 2) as double_new, pow(decimal_data, 2) as decimal_new, pow(string_data, 2) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +------------+----------------------+----------------------+------------+
      | bigint_new | double_new           | decimal_new          | string_new |
      +------------+----------------------+----------------------+------------+
      | 100.0      | 0.275625             | 0.275625             | 100.0      |
      | NULL       | 0.010000000000000002 | 0.010000000000000002 | 100.0      |
      | 1.0        | NULL                 | 418.2025             | 900.0      |
      | 16.0       | 0.7921               | NULL                 | 900.0      |
      | 2500.0     | 1.0                  | 1.0                  | 2500.0     |
      | 36.0       | 2.25                 | 2.25                 | 2500.0     |
      | 4900.0     | 56.25                | 56.25                | NULL       |
      | 1.0        | 104.03999999999999   | 104.03999999999999   | 1.0        |
      | 8100.0     | 6.6564000000000005   | 6.6564000000000005   | 0.0        |
      | 100.0      | 33.64                | 33.64                | 8100.0     |
      +------------+----------------------+----------------------+------------+

RADIANS

  • 構文

    double radians(<number>)
  • 説明

    値を度からラジアンに変換します。これは MaxCompute V2.0 の拡張関数です。

  • パラメーター

    number: 必須。DOUBLE、BIGINT、INT、SMALLINT、TINYINT、FLOAT、DECIMAL、または STRING 型の値。

  • 戻り値

    DOUBLE 型の値が返されます。number の値が NULL の場合、NULL が返されます。

    • 静的データの例

      --戻り値は 1.5707963267948966 です。
      select radians(90);
      --戻り値は 0.0 です。
      select radians(0);
      --戻り値は NULL です。
      select radians(null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドはすべての列をラジアンに変換します。

      --MaxCompute V2.0 の新しいデータ型を有効にします。このコマンドは SQL 文と一緒に実行する必要があります。
      set odps.sql.type.system.odps2=true;
      select radians(int_data) as int_new, radians(bigint_data) as bigint_new, radians(double_data) as double_new, radians(decimal_data) as decimal_new, radians(float_data) as float_new, radians(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +-----------------------+-----------------------+------------------------+------------------------+------------------------+-----------------------+
      | int_new               | bigint_new            | double_new             | decimal_new            | float_new              | string_new            |
      +-----------------------+-----------------------+------------------------+------------------------+------------------------+-----------------------+
      | NULL                  | -0.17453292519943295  | 0.00916297857297023    | 0.00916297857297023    | 0.009162978156851308   | 0.17453292519943295   |
      | -0.3490658503988659   | NULL                  | -0.0017453292519943296 | -0.0017453292519943296 | -0.0017453292780017621 | -0.17453292519943295  |
      | 0.0                   | -0.017453292519943295 | NULL                   | 0.3569198320328404     | -0.017453292519943295  | 0.5235987755982988    |
      | -0.6981317007977318   | 0.06981317007977318   | 0.015533430342749534   | NULL                   | 0.015533430093078181   | -0.5235987755982988   |
      | 0.08726646259971647   | -0.8726646259971648   | -0.017453292519943295  | -0.017453292519943295  | NULL                   | 0.8726646259971648    |
      | -1.0471975511965976   | 0.10471975511965977   | 0.02617993877991494    | 0.02617993877991494    | 0.02617993877991494    | -0.8726646259971648   |
      | -0.017453292519943295 | -1.2217304763960306   | -0.1308996938995747    | -0.1308996938995747    | -0.1308996938995747    | NULL                  |
      | -1.3962634015954636   | 0.017453292519943295  | -0.17802358370342158   | -0.17802358370342158   | -0.17802358037447025   | -0.017453292519943295 |
      | 0.15707963267948966   | -1.5707963267948966   | 0.045029494701453704   | 0.045029494701453704   | 0.04502949336987316    | 0.0                   |
      | -1.7453292519943295   | 0.17453292519943295   | -0.10122909661567112   | -0.10122909661567112   | -0.10122909994462247   | -1.5707963267948966   |
      +-----------------------+-----------------------+------------------------+------------------------+------------------------+-----------------------+

RAND

  • 構文

    double rand(bigint <seed>)
  • 説明

    0 から 1 の範囲の DOUBLE 型の乱数を返します。

  • パラメーター

    seed: オプション。BIGINT 型の値。シードは、乱数シーケンスの初期値を決定します。

    説明

    seed を使用して乱数シーケンスを指定できます。seed が指定されると、この関数の戻り値は固定されます。実行環境と seed の値が同じままであれば、戻り値は同じです。異なる結果を得るには、seed の値を変更する必要があります。

    SQL 文の前に次のパラメーターを追加できます。デフォルト値は false です。

    set odps.sql.executionengine.enable.rand.time.seed=true|false;
    • このパラメーターが false に設定されている場合、RAND 関数は現在のインスタンス ID を乱数の初期 seed として使用し、関数のべき等性を保証します。

    • このパラメーターが true に設定されている場合、RAND 関数は現在のシステム時刻を乱数の初期 seed として使用します。ただし、RAND 関数はべき等ではなくなり、シャッフルキーとして使用できません。これにより、関数を再度実行すると異なる結果が生じます。

  • 戻り値

    DOUBLE 型の値が返されます。

  • --戻り値は 4.7147460303803655E-4 です。
    select rand();
    --戻り値は 0.7308781907032909 です。
    select rand(1);

ROUND

  • 構文

    double|decimal round(<number>[, bigint <decimal_places>])
  • 説明

    値を指定された小数点以下の桁数に四捨五入します。

  • パラメーター

    • number: 必須。DOUBLE または DECIMAL 型の値。入力値が STRING または BIGINT 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

    • decimal_places: オプション。BIGINT 型の定数。このパラメーターは、値を四捨五入する小数点以下の桁数を指定します。このパラメーターを省略すると、値は最も近い整数に四捨五入されます。デフォルト値は 0 です。

      説明

      decimal_places の値は負の数にすることができます。値が負の場合、関数は小数点の左側の桁を四捨五入し、小数部分は保持しません。decimal_places の値が整数部分の長さより大きい場合、0 が返されます。

  • 戻り値

    DOUBLE 型または DECIMAL 型の値が返されます。以下のルールが適用されます:

    • number のデータの型が DOUBLE または DECIMAL の場合、対応する型の値が返されます。

    • number のデータの型が STRING または BIGINT の場合、DOUBLE 型の値が返されます。

    • decimal_places のデータの型が BIGINT でない場合、エラーが返されます。

    • number または decimal_places の値が NULL の場合、NULL が返されます。

    • 静的データの例

      --戻り値は 125.0 です。
      select round(125.315);
      --戻り値は 125.3 です。
      select round(125.315, 1);
      --戻り値は 125.32 です。
      select round(125.315, 2);
      --戻り値は 125.315 です。
      select round(125.315, 3);
      --戻り値は -125.32 です。
      select round(-125.315, 2);
      --戻り値は 100.0 です。
      select round(123.345, -2);
      --戻り値は NULL です。
      select round(null);
      --戻り値は 123.345 です。
      select round(123.345, 4);
      --戻り値は 0.0 です。
      select round(123.345, -4);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは、列の値を指定された小数点以下の桁数に四捨五入します。

      select round(bigint_data, 1) as bigint_new, round(double_data, 2) as double_new, round(decimal_data, 1) as decimal_new, round(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +------------+------------+-------------+------------+
      | bigint_new | double_new | decimal_new | string_new |
      +------------+------------+-------------+------------+
      | -10.0      | 0.53       | 0.5         | 10.0       |
      | NULL       | -0.1       | -0.1        | -10.0      |
      | -1.0       | NULL       | 20.5        | 30.0       |
      | 4.0        | 0.89       | NULL        | -30.0      |
      | -50.0      | -1.0       | -1          | 50.0       |
      | 6.0        | 1.5        | 1.5         | -50.0      |
      | -70.0      | -7.5       | -7.5        | NULL       |
      | 1.0        | -10.2      | -10.2       | -1.0       |
      | -90.0      | 2.58       | 2.6         | 0.0        |
      | 10.0       | -5.8       | -5.8        | -90.0      |
      +------------+------------+-------------+------------+

SHIFTLEFT

  • 構文

    int shiftleft(tinyint|smallint|int <number1>, int <number2>)
    bigint shiftleft(bigint <number1>, int <number2>)
  • 説明

    左シフト (<<) を実行します。これは MaxCompute V2.0 の拡張関数です。

  • パラメーター

    • number1: 必須。TINYINT、SMALLINT、INT、または BIGINT 型の値。

    • number2: 必須。INT 型の値。

  • 戻り値

    INT 型または BIGINT 型の値が返されます。次のルールが適用されます。

    • number1 のデータの型が TINYINT、SMALLINT、INT、または BIGINT でない場合、エラーが返されます。

    • number2 のデータの型が INT でない場合、エラーが返されます。

    • number1 または number2 の値が NULL の場合、NULL が返されます。

    • 静的データの例

      --戻り値は 4 です。1 のバイナリ値が 2 ビット左にシフトされます (1<<2、0001 は 2 ビット左にシフトされて 0100 になります)。
      select shiftleft(1,2); 
      --戻り値は 32 です。4 のバイナリ値が 3 ビット左にシフトされます (4<<3、0100 は 3 ビット左にシフトされて 100000 になります)。
      select shiftleft(4,3);
      --戻り値は NULL です。
      select shiftleft(null,2);
    • テーブルデータの例

      サンプルデータ」に基づいて、次のコマンドは int_data 列と bigint_data 列で左シフトを実行します。

      --MaxCompute V2.0 の新しいデータの型を有効にします。このコマンドは SQL 文と一緒に実行する必要があります。
      set odps.sql.type.system.odps2=true;
      select shiftleft(int_data, 1) as int_new, shiftleft(bigint_data, 1) as bigint_new from mf_math_fun_t;

      次の結果が返されます。

      +---------+------------+
      | int_new | bigint_new |
      +---------+------------+
      | NULL    | -20        |
      | -40     | NULL       |
      | 0       | -2         |
      | -80     | 8          |
      | 10      | -100       |
      | -120    | 12         |
      | -2      | -140       |
      | -160    | 2          |
      | 18      | -180       |
      | -200    | 20         |
      +---------+------------+

シフトライト

  • 構文

    int shiftright(tinyint|smallint|int <number1>, int <number2>)
    bigint shiftright(bigint <number1>, int <number2>)
  • 説明

    右シフト (>>) を実行します。これは MaxCompute V2.0 の拡張関数です。

  • パラメーター

    • number1: 必須。TINYINT、SMALLINT、INT、BIGINT 型の値。

    • number2: 必須。INT 型の値。

  • 戻り値

    INT または BIGINT 型の値が返されます。次のルールが適用されます:

    • number1 のデータ型が TINYINT、SMALLINT、INT、または BIGINT でない場合、エラーが返されます。

    • number2 のデータ型が INT でない場合、エラーが返されます。

    • number1 または number2 の値が NULL の場合、NULL が返されます。

    • 静的データの例

      --戻り値は 1 です。4 の 2 進数値 0100 が 2 ビット右にシフトされ (4>>2)、0001 になります。
      select shiftright(4,2);
      --戻り値は 4 です。32 の 2 進数値 100000 が 3 ビット右にシフトされ (32>>3)、0100 になります。
      select shiftright(32,3);
      --戻り値は NULL です。
      select shiftright(null,3);
    • テーブルデータの例

      サンプルデータに基づいて、次のコマンドは int_data および bigint_data カラムに対して右シフトを実行します。

      --MaxCompute V2.0 の新しいデータの型を有効にします。このコマンドは SQL 文と一緒に実行する必要があります。
      set odps.sql.type.system.odps2=true;
      select shiftright(int_data, 1) as int_new, shiftright(bigint_data, 1) as bigint_new from mf_math_fun_t;

      次の結果が返されます。

      +---------+------------+
      | int_new | bigint_new |
      +---------+------------+
      | NULL    | -5         |
      | -10     | NULL       |
      | 0       | -1         |
      | -20     | 2          |
      | 2       | -25        |
      | -30     | 3          |
      | -1      | -35        |
      | -40     | 0          |
      | 4       | -45        |
      | -50     | 5          |
      +---------+------------+

SHIFTRIGHTUNSIGNED

  • 構文

    int shiftrightunsigned(tinyint|smallint|int <number1>, int <number2>)
    bigint shiftrightunsigned(bigint <number1>, int <number2>)
  • 説明

    符号なし右シフト (>>>) を実行します。これは MaxCompute V2.0 の拡張関数です。

  • パラメーター

    • number1: 必須。TINYINT、SMALLINT、INT、または BIGINT 型の整数。

    • number2: 必須。INT 型の整数。

  • 戻り値

    INT または BIGINT 型の値が返されます。次のルールが適用されます。

    • number1 のデータの型が TINYINT、SMALLINT、INT、または BIGINT でない場合、エラーが返されます。

    • number2 のデータの型が INT でない場合、エラーが返されます。

    • number1 または number2 の値が NULL の場合、NULL が返されます。

    • 静的データの例

      --戻り値は 2 です。 8 のバイナリ値は、符号を考慮せずに 2 ビット右にシフトされます (8>>>2、1000 は 2 ビット右にシフトされて 0010 になります)。
      select shiftrightunsigned(8,2);
      --戻り値は 1073741820 です。 -14 のバイナリ値は 2 ビット右にシフトされます (-14>>>2、11111111 11111111 11111111 11110010 は 2 ビット右にシフトされて 00111111 11111111 11111111 11111100 になります)。
      select shiftrightunsigned(-14,2);
      --戻り値は NULL です。
      select shiftrightunsigned(-14,null);
    • テーブルデータの例

      サンプルデータに基づいて、次のコマンドは int_data および bigint_data 列の符号なし右シフト値を返します。

      --MaxCompute V2.0 の新しいデータ型を有効にします。 このコマンドは SQL 文と一緒に実行する必要があります。
      set odps.sql.type.system.odps2=true;
      select shiftrightunsigned(int_data, 1) as int_new, shiftrightunsigned(bigint_data, 1) as bigint_new from mf_math_fun_t;

      次の結果が返されます。

      +------------+---------------------+
      | int_new    | bigint_new          |
      +------------+---------------------+
      | NULL       | 9223372036854775803 |
      | 2147483638 | NULL                |
      | 0          | 9223372036854775807 |
      | 2147483628 | 2                   |
      | 2          | 9223372036854775783 |
      | 2147483618 | 3                   |
      | 2147483647 | 9223372036854775773 |
      | 2147483608 | 0                   |
      | 4          | 9223372036854775763 |
      | 2147483598 | 5                   |
      +------------+---------------------+

SIGN

  • 構文

    double sign(<number>)
  • 説明

    入力パラメーターの符号を取得します。これは MaxCompute V2.0 の拡張関数です。

  • パラメーター

    number: 必須。DOUBLE、BIGINT、INT、SMALLINT、TINYINT、FLOAT、DECIMAL、または STRING 型の値。

  • 戻り値

    DOUBLE 型の値が返されます。次のルールが適用されます。

    • number の値が正の数の場合、1.0 が返されます。

    • number の値が負の数の場合、-1.0 が返されます。

    • number の値が 0 の場合、0.0 が返されます。

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

    • 静的データの例

      --戻り値は -1.0 です。
      select sign(-2.5);
      --戻り値は 1.0 です。
      select sign(2.5);
      --戻り値は 0.0 です。
      select sign(0);
      --戻り値は NULL です。
      select sign(null);
    • テーブルデータの例

      サンプルデータに基づいて、次のコマンドはすべての列の符号を取得します。

      --MaxCompute V2.0 の新しいデータ型を有効にします。このコマンドは SQL 文と一緒に実行する必要があります。
      set odps.sql.type.system.odps2=true;
      select sign(int_data) as int_new, sign(bigint_data) as bigint_new, sign(double_data) as double_new, sign(decimal_data) as decimal_new, sign(float_data) as float_new, sign(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +------------+------------+------------+-------------+------------+------------+
      | int_new    | bigint_new | double_new | decimal_new | float_new  | string_new |
      +------------+------------+------------+-------------+------------+------------+
      | NULL       | -1.0       | 1.0        | 1           | 1.0        | 1.0        |
      | -1.0       | NULL       | -1.0       | -1          | -1.0       | -1.0       |
      | 0.0        | -1.0       | NULL       | 1           | -1.0       | 1.0        |
      | -1.0       | 1.0        | 1.0        | NULL        | 1.0        | -1.0       |
      | 1.0        | -1.0       | -1.0       | -1          | NULL       | 1.0        |
      | -1.0       | 1.0        | 1.0        | 1           | 1.0        | -1.0       |
      | -1.0       | -1.0       | -1.0       | -1          | -1.0       | NULL       |
      | -1.0       | 1.0        | -1.0       | -1          | -1.0       | -1.0       |
      | 1.0        | -1.0       | 1.0        | 1           | 1.0        | 0.0        |
      | -1.0       | 1.0        | -1.0       | -1          | -1.0       | -1.0       |
      +------------+------------+------------+-------------+------------+------------+

SIN

  • 構文

    double|decimal sin(<数値>)
  • 説明

    number のサインを計算します。入力値はラジアン単位です。

  • パラメーター

    number: 必須。DOUBLE 型または DECIMAL 型の値。入力値が STRING 型または BIGINT 型の場合、計算のために DOUBLE 型の値に暗黙的に変換されます。

  • 戻り値

    DOUBLE 型または DECIMAL 型の値が返されます。次のルールが適用されます。

    • number が DOUBLE 型または DECIMAL 型の場合、対応する型の値が返されます。

    • number が STRING 型または BIGINT 型の場合、DOUBLE 型の値が返されます。

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

    • 静的データの例

      --戻り値は -0.3048106211022167 です。
      select sin(60);
      --戻り値は NULL です。
      select sin(null);
    • テーブルデータの例

      サンプルデータに基づいて、次のコマンドは列のサインを計算します。

      select sin(bigint_data) as bigint_new, sin(double_data) as double_new, sin(decimal_data) as decimal_new, sin(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +----------------------+----------------------+----------------------+----------------------+
      | bigint_new           | double_new           | decimal_new          | string_new           |
      +----------------------+----------------------+----------------------+----------------------+
      | 0.5440211108893698   | 0.5012130046737979   | 0.5012130046737979   | -0.5440211108893698  |
      | NULL                 | -0.09983341664682815 | -0.09983341664682815 | 0.5440211108893698   |
      | -0.8414709848078965  | NULL                 | 0.9995605376022045   | -0.9880316240928618  |
      | -0.7568024953079282  | 0.7770717475268238   | NULL                 | 0.9880316240928618   |
      | 0.26237485370392877  | -0.8414709848078965  | -0.8414709848078965  | -0.26237485370392877 |
      | -0.27941549819892586 | 0.9974949866040544   | 0.9974949866040544   | 0.26237485370392877  |
      | -0.7738906815578891  | -0.9379999767747389  | -0.9379999767747389  | NULL                 |
      | 0.8414709848078965   | 0.6998746875935423   | 0.6998746875935423   | -0.8414709848078965  |
      | -0.8939966636005579  | 0.5325349075556212   | 0.5325349075556212   | 0.0                  |
      | -0.5440211108893698  | 0.46460217941375737  | 0.46460217941375737  | -0.8939966636005579  |
      +----------------------+----------------------+----------------------+----------------------+

SINH

  • 構文

    double|decimal sinh(<number>)
  • 説明

    number の双曲線正弦を計算します。

  • パラメーター

    number: 必須。DOUBLE 型または DECIMAL 型の値。入力値が STRING 型または BIGINT 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

  • 戻り値

    DOUBLE 型または DECIMAL 型の値が返されます。次のルールが適用されます。

    • number が DOUBLE 型または DECIMAL 型の場合、対応する型の値が返されます。

    • number が STRING 型または BIGINT 型の場合、DOUBLE 型の値が返されます。

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

    • 静的データの例

      --戻り値は 5.343237290762231E12 です。
      select sinh(30);
      --戻り値は NULL です。
      select sinh(null);
    • テーブルデータの例

      サンプルデータに基づいて、次のコマンドは、列の双曲線正弦を計算します。

      select sinh(bigint_data) as bigint_new, sinh(double_data) as double_new, sinh(decimal_data) as decimal_new, sinh(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +------------------------+----------------------+----------------------+-----------------------+
      | bigint_new             | double_new           | decimal_new          | string_new            |
      +------------------------+----------------------+----------------------+-----------------------+
      | -11013.232874703393    | 0.5494517420061382   | 0.5494517420061382   | 11013.232874703393    |
      | NULL                   | -0.10016675001984403 | -0.10016675001984403 | -11013.232874703393   |
      | -1.1752011936438014    | NULL                 | 380445243.96844625   | 5343237290762.231     |
      | 27.28991719712775      | 1.0122369492687646   | NULL                 | -5343237290762.231    |
      | -2.592352764293536e21  | -1.1752011936438014  | -1.1752011936438014  | 2.592352764293536e21  |
      | 201.71315737027922     | 2.1292794550948173   | 2.1292794550948173   | -2.592352764293536e21 |
      | -1.2577193354595834e30 | -904.0209306858466   | -904.0209306858466   | NULL                  |
      | 1.1752011936438014     | -13451.593018563612  | -13451.593018563612  | -1.1752011936438014   |
      | -6.102016471589204e38  | 6.560682077817757    | 6.560682077817757    | 0.0                   |
      | 11013.232874703393     | -165.1482661774516   | -165.1482661774516   | -6.102016471589204e38 |
      +------------------------+----------------------+----------------------+-----------------------+

SQRT

  • 構文

    double|decimal sqrt(<number>)
  • 説明

    number の平方根を計算します。

  • パラメーター

    number: 必須。 DOUBLE 型または DECIMAL 型の値。 値は 0 より大きい必要があります。 値が 0 未満の場合、NULL が返されます。 入力値が STRING 型または BIGINT 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

  • 戻り値

    DOUBLE 型または DECIMAL 型の値が返されます。 次のルールが適用されます。

    • number が DOUBLE 型または DECIMAL 型の場合、対応する型の値が返されます。

    • number が STRING 型または BIGINT 型の場合、DOUBLE 型の値が返されます。

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

    • 静的データの例

      --戻り値は 2.0 です。
      select sqrt(4);
      --戻り値は NULL です。
      select sqrt(null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは列の平方根を計算します。

      select sqrt(bigint_data) as bigint_new, sqrt(double_data) as double_new, sqrt(decimal_data) as decimal_new, sqrt(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +--------------------+--------------------+-------------------+--------------------+
      | bigint_new         | double_new         | decimal_new       | string_new         |
      +--------------------+--------------------+-------------------+--------------------+
      | NULL               | 0.724568837309472  | 0.724568837309472 | 3.1622776601683795 |
      | NULL               | NULL               | NULL              | NULL               |
      | NULL               | NULL               | 4.522167621838006 | 5.477225575051661  |
      | 2.0                | 0.9433981132056604 | NULL              | NULL               |
      | NULL               | NULL               | NULL              | 7.0710678118654755 |
      | 2.449489742783178  | 1.224744871391589  | 1.224744871391589 | NULL               |
      | NULL               | NULL               | NULL              | NULL               |
      | 1.0                | NULL               | NULL              | NULL               |
      | NULL               | 1.606237840420901  | 1.606237840420901 | 0.0                |
      | 3.1622776601683795 | NULL               | NULL              | NULL               |
      +--------------------+--------------------+-------------------+--------------------+

TAN

  • 構文

    double|decimal tan(<数値>)
  • 説明

    number のタンジェントを計算します。入力値はラジアンです。

  • パラメーター

    number: 必須。DOUBLE 型または DECIMAL 型の値です。入力値が STRING 型または BIGINT 型の場合、計算用に DOUBLE 型の値に暗黙的に変換されます。

  • 戻り値

    DOUBLE 型または DECIMAL 型の値が返されます。以下のルールが適用されます。

    • number が DOUBLE 型または DECIMAL 型の場合、対応する型の値が返されます。

    • number が STRING 型または BIGINT 型の場合、DOUBLE 型の値が返されます。

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

    • 静的データの例

      --戻り値は -6.405331196646276 です。
      select tan(30);
      --戻り値は NULL です。
      select tan(null);
    • テーブルデータの例

      サンプルデータに基づき、次のコマンドで列のタンジェントを計算します。

      select tan(bigint_data) as bigint_new, tan(double_data) as double_new, tan(decimal_data) as decimal_new, tan(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +----------------------+----------------------+----------------------+----------------------+
      | bigint_new           | double_new           | decimal_new          | string_new           |
      +----------------------+----------------------+----------------------+----------------------+
      | -0.6483608274590866  | 0.5792200822893652   | 0.5792200822893652   | 0.6483608274590866   |
      | NULL                 | -0.10033467208545055 | -0.10033467208545055 | -0.6483608274590866  |
      | -1.5574077246549023  | NULL                 | -33.71948732190433   | -6.405331196646276   |
      | 1.1578212823495775   | 1.2345994590490046   | NULL                 | 6.405331196646276    |
      | 0.27190061199763077  | -1.5574077246549023  | -1.5574077246549023  | -0.27190061199763077 |
      | -0.29100619138474915 | 14.101419947171719   | 14.101419947171719   | 0.27190061199763077  |
      | -1.2219599181369434  | -2.706013866772691   | -2.706013866772691   | NULL                 |
      | 1.5574077246549023   | -0.979852083895097   | -0.979852083895097   | -1.5574077246549023  |
      | 1.995200412208242    | -0.6291704256385503  | -0.6291704256385503  | 0.0                  |
      | 0.6483608274590866   | 0.5246662219468002   | 0.5246662219468002   | 1.995200412208242    |
      +----------------------+----------------------+----------------------+----------------------+

TANH

  • 構文

    double|decimal tanh(<number>)
  • 説明

    number のハイパーボリックタンジェントを計算します。

  • パラメーター

    number: 必須。DOUBLE 型または DECIMAL 型の値。入力値が STRING 型または BIGINT 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

  • 戻り値

    DOUBLE 型または DECIMAL 型の値が返されます。次のルールが適用されます。

    • number が DOUBLE 型または DECIMAL 型の場合、対応する型の値が返されます。

    • number が STRING 型または BIGINT 型の場合、DOUBLE 型の値が返されます。

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

    • 静的データの例

      --戻り値は 1.0 です。
      select tanh(30);
      --戻り値は NULL です。
      select tanh(null);
    • テーブルデータの例

      サンプルデータ に基づいて、次のコマンドは列のハイパーボリックタンジェントを計算します。

      select tanh(bigint_data) as bigint_new, tanh(double_data) as double_new, tanh(decimal_data) as decimal_new, tanh(string_data) as string_new from mf_math_fun_t;

      次の結果が返されます。

      +---------------------+----------------------+----------------------+---------------------+
      | bigint_new          | double_new           | decimal_new          | string_new          |
      +---------------------+----------------------+----------------------+---------------------+
      | -0.9999999958776927 | 0.48154979836430806  | 0.48154979836430806  | 0.9999999958776927  |
      | NULL                | -0.09966799462495582 | -0.09966799462495582 | -0.9999999958776927 |
      | -0.7615941559557649 | NULL                 | 1.0                  | 1.0                 |
      | 0.999329299739067   | 0.7113937318189625   | NULL                 | -1.0                |
      | -1.0                | -0.7615941559557649  | -0.7615941559557649  | 1.0                 |
      | 0.9999877116507956  | 0.9051482536448664   | 0.9051482536448664   | -1.0                |
      | -1.0                | -0.9999993881955461  | -0.9999993881955461  | NULL                |
      | 0.7615941559557649  | -0.9999999972367348  | -0.9999999972367348  | -0.7615941559557649 |
      | -1.0                | 0.9885821584459533   | 0.9885821584459533   | 0.0                 |
      | 0.9999999958776927  | -0.9999816679925603  | -0.9999816679925603  | -1.0                |
      +---------------------+----------------------+----------------------+---------------------+

TRUNC

  • 構文

    double|decimal trunc(<number>[, bigint <decimal_places>])
  • 説明

    入力値 number を指定された小数点以下に切り捨てます。

    説明

    Hive 互換モードでは、この関数は数学関数としてではなく、日付変換に使用されます。対応する日付関数の詳細については、「DATETRUNC」をご参照ください。必要に応じて、MaxCompute プロジェクトのデータの型バージョンを設定できます。データの型バージョンの詳細については、「データの型バージョン」をご参照ください。

  • パラメーター

    • number: 必須。 DOUBLE 型または DECIMAL 型の値。 入力値が STRING 型または BIGINT 型の場合、計算のために暗黙的に DOUBLE 型の値に変換されます。

    • decimal_places: 任意。 BIGINT 型の定数。 このパラメーターは、値を切り捨てる小数点以下の桁数を指定します。 このパラメーターを省略した場合、値は最も近い整数に切り捨てられます。 decimal_places の値は負の数にすることができます。 値が負の数の場合、この関数は小数点の左側から切り捨て、小数部分は保持しません。 decimal_places の値が整数部分の長さより大きい場合、0 が返されます。

  • 戻り値

    DOUBLE または DECIMAL 型の値が返されます。次のルールが適用されます:

    • number が DOUBLE 型または DECIMAL 型の場合、対応する型の値が返されます。

    • number が STRING 型または BIGINT 型の場合、DOUBLE 型の値が返されます。

    • decimal_places のデータの型が BIGINT でない場合、エラーが返されます。

    • number または decimal_places の値が NULL の場合、NULL が返されます。

    説明
    • DOUBLE 型の値が返された場合、結果が期待どおりにならないことがあります。 たとえば、trunc(125.815,1) です。 この DOUBLE 型の表示に関する問題は、すべてのシステムに存在します。

    • 切り捨てられた部分はゼロで埋められます。

    • 静的データの例

      --戻り値は 125.0 です。
      select trunc(125.815,0);
      --戻り値は 125.80000000000001 です。
      select trunc(125.815,1);
      --戻り値は 125.81 です。
      select trunc(125.815,2);
      --戻り値は 125.815 です。
      select trunc(125.815,3);
      --戻り値は -125.81 です。
      select trunc(-125.815,2);
      --戻り値は 120.0 です。
      select trunc(125.815,-1);
      --戻り値は 100.0 です。
      select trunc(125.815,-2);
      --戻り値は 0.0 です。
      select trunc(125.815,-3);
      --戻り値は 123.345 です。
      select trunc(123.345,4);
      --戻り値は 0.0 です。
      select trunc(123.345,-4);
      --戻り値は NULL です。
      select trunc(123.345,null);
    • テーブルデータの例

      サンプルデータ」に基づいて、次のコマンドは列の値を指定された小数点以下に切り捨てます。

      select trunc(bigint_data, 1) as bigint_new, trunc(double_data,1) as double_new, trunc(decimal_data, 1) as decimal_new, trunc(string_data, 1) as string_new from mf_math_fun_t;

      以下の結果が返されます。

      +------------+---------------------+-------------+------------+
      | bigint_new | double_new          | decimal_new | string_new |
      +------------+---------------------+-------------+------------+
      | -10.0      | 0.5                 | 0.5         | 10.0       |
      | NULL       | -0.1                | -0.1        | -10.0      |
      | -1.0       | NULL                | 20.4        | 30.0       |
      | 4.0        | 0.8                 | NULL        | -30.0      |
      | -50.0      | -1.0                | -1          | 50.0       |
      | 6.0        | 1.5                 | 1.5         | -50.0      |
      | -70.0      | -7.5                | -7.5        | NULL       |
      | 1.0        | -10.200000000000001 | -10.2       | -1.0       |
      | -90.0      | 2.5                 | 2.5         | 0.0        |
      | 10.0       | -5.800000000000001  | -5.8        | -90.0      |
      +------------+---------------------+-------------+------------+

UNHEX

  • 構文

    binary unhex(string <number>)
  • 説明

    16 進数文字列で表される文字列を返します。これは MaxCompute V2.0 の拡張関数です。

  • パラメーター

    number: 必須。16 進数文字列。

  • 戻り値

    BINARY 型の値が返されます。次のルールが適用されます。

    • number の値が 0 の場合、エラーが返されます。

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

  • --戻り値は abc です。
    select unhex('616263');
    --戻り値は abc です。
    select unhex(616263);
    --戻り値は NULL です。
    select unhex(null);

WIDTH_BUCKET

  • 構文

    width_bucket(numeric <式>, numeric <最小値>, numeric <最大値>, int <バケット数>)
  • 説明

    この関数は、指定された最小値、最大値、およびグループ数に基づいて、指定された数の等しいサイズのグループを構築し、指定されたフィールドの値が属するグループ番号を返します。サポートされているデータの型は、MaxCompute V2.0 の BIGINT、INT、FLOAT、DOUBLE、DECIMAL、および DECIMAL(precision, scale) です。詳細については、「MaxCompute V2.0 のデータの型のエディション」をご参照ください。この関数は MaxCompute V2.0 の拡張関数です。

  • パラメーター

    • expr: 必須。 グループ番号を決定するフィールド。

    • min_value: 必須。 グループ範囲の最小値。

    • max_value: 必須。 グループ範囲の最大値。 最大値は最小値より大きい必要があります。

    • num_buckets: 必須。 グループの数。 値は 0 より大きい必要があります。

  • 戻り値

    BIGINT 型の値が返されます。値の範囲は 0 から指定されたグループ数に 1 を加えた値までです。値は、次のルールに基づいて返されます。

    • expr の値が min_value の値より小さい場合、0 が返されます。

    • expr の値が max_value の値より大きい場合、指定されたグループ数に 1 を加えた値が返されます。

    • expr の値が NULL の場合、NULL が返されます。その他の場合、フィールド値が属するグループ番号が返されます。グループ番号は、次の数式を使用して計算されます: floor( num_buckets * (expr - min_value)/(max_value - min_value) + 1)

    • min_valuemax_value、または num_buckets の値が NULL の場合、NULL が返されます。

    • 例 1: 入力パラメーターのいずれも NULL ではありません。 コマンド例:

      select key,value,width_bucket(value,100,500,5) as value_group
      from values 
          (1,99),
          (2,100),
          (3,199),
          (4,200),
          (5,499),
          (6,500),
          (7,501),
          (8,NULL)
      as t(key,value);

      次の結果が返されます。

      +-------+--------+-------------+
      | key   | value  | value_group |
      +-------+--------+-------------+
      | 1     | 99     | 0           |
      | 2     | 100    | 1           |
      | 3     | 199    | 2           |
      | 4     | 200    | 2           |
      | 5     | 499    | 5           |
      | 6     | 500    | 6           |
      | 7     | 501    | 6           |
      | 8     | NULL   | NULL        |
      +-------+--------+-------------+
    • 例 2: 入力パラメーターの 1 つが NULL です。 コマンド例:

      select key,value,width_bucket(value,100,500,null) as value_group
      from values
          (1,99),
          (2,100),
          (3,199),
          (4,200),
          (5,499),
          (6,500),
          (7,501),
          (8,NULL)
      as t(key,value);

      次の結果が返されます。

      +------+-------+-------------+
      | key  | value | value_group |
      +------+-------+-------------+
      | 1    | 99    | NULL        |
      | 2    | 100   | NULL        |
      | 3    | 199   | NULL        |
      | 4    | 200   | NULL        |
      | 5    | 499   | NULL        |
      | 6    | 500   | NULL        |
      | 7    | 501   | NULL        |
      | 8    | NULL  | NULL        |
      +------+-------+-------------+

参照