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

MaxCompute:INTERVALデータ型

最終更新日:Jan 17, 2025

MaxComputeは、date、DATETIME、TIMESTAMP、TIMESTAMP_NTZの4つの日付と時刻に関連するデータ型をサポートしています。 また、2つの日付または時刻の間の期間を示すINTERVALデータ型も提供します。 このトピックでは、INTERVAL型の使用方法について説明します。

前提条件

INTERVALデータ型を使用するには、SET odps.sql.type.system.odps2=true; を設定して、MaxCompute 2.0データ型を有効にする必要があります。

使用方法の指示

INTERVALデータ型は2つのタイプをサポートします。

  • INTERVAL_YEAR_MONTH: yearおよびmonthフィールドを使用して、年と月の間隔を格納します。

  • INTERVAL_DAY_TIME: 日、時間、分、秒、および分数秒単位の日間間隔を格納します。

INTERVAL_YEAR_月

  • 構文

    構文形式

    説明

    INTERVAL '<year | -year>-<month>' YEAR TO MONTH

    YEARとMONTHの両方の間隔を指定します。

    120年と3ヶ月の间隔:

    • インターバル「120-3」月まで

    • インターバル '-120-3' 月まで

    INTERVAL '<year | -year>' YEAR

    YEAR間隔のみを指定します。

    9年の间隔:

    • インターバル '9' 年

    • インターバル '-9' 年

    INTERVAL '<month | -month>' MONTH

    MONTH間隔のみを指定します。

    40ヶ月 (3年と4ヶ月) の间隔:

    • INTERVAL '40' MONTH (INTERVAL '3-4' YEAR to MONTHに相当)

    • INTERVAL '-40' MONTH (INTERVAL '-3-4' YEAR to MONTHに相当)

  • 有効なパラメーター範囲

    • 年: [0, 9999] 。

    • 月: [0, 11] 。

  • 注意事項

    • 月間隔のみを指定する場合、月の値は11を超えることがあり、11を超える値は計算のために年に変換されます。 次のコードは例を示しています。

      SELECT INTERVAL '200' MONTH;

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

      +------------+
      | _c0        | 
      +------------+
      | 16-8       | 
      +------------+
    • YEARとMONTHの両方を指定する場合、月の値は11を超えることはできません。 次のコードは正しくない例です。

      SELECT INTERVAL '-2021-12' YEAR TO MONTH;

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

      FAILED: ODPS-0130161:[1,17] Parse exception - cannot parse -2021-12 as a valid INTERVAL_DAY_TIME

INTERVAL_DAY_TIME

  • 構文

    構文形式

    説明

    INTERVAL '<day | -day>' DAY

    DAY間隔のみを指定します。

    1日の間隔:

    • インターバル「1日」

    • インターバル '-1' 日

    INTERVAL '<hour | -hour>' HOUR

    HOUR間隔のみを指定します。

    1時間の間隔:

    • インターバル「1」時間

    • インターバル '-1' アワー

    INTERVAL '<minute | -minute>' MINUTE

    MINUTE間隔のみを指定します。

    1分の间隔:

    • インターバル「1」分

    • INTERVAL '-1' 分

    INTERVAL '<second | -second>' SECOND

    SECOND間隔のみを指定します。

    1.1秒の间隔:

    • インターバル '1.1 '第2

    • インターバル '-1.1' 2番目

    INTERVAL '<day | -day> <hour>' DAY TO HOUR

    DAYとHOURの両方の間隔を指定します。

    1日と23時間の間隔:

    • INTERVAL '1 23' DAY TO HOUR

    • インターバル '-1 23' 日から時間

    INTERVAL '<day | -day> <hour>:<minute>' DAY TO MINUTE

    DAY、HOUR、MINUTEの間隔を同時に指定します。

    1日、23時間、59分の間隔:

    • インターバル「1 23:59」分まで

    • INTERVAL '-1 23:59' DAY TO MINUTE

    INTERVAL '<day | -day> <second>' DAY TO SECOND

    DAY、HOUR、MINUTE、および2番目の間隔を同時に指定します。

    1日、23時間、59分、59.999秒の間隔:

    • インターバル '1 23:59:59.999 '2日目

    • INTERVAL '-1 23:59:59.999' 2日目

    INTERVAL '<hour | -hour>:<minute>' HOUR TO MINUTE

    HOURとMINUTEの両方の間隔を指定します。

    23時間59分の間隔:

    • インターバル '23:59' 分までの時間

    • インターバル '-23:59' 分

    INTERVAL '<hour | -hour>:<minute>:<second>' HOUR TO SECOND

    HOUR、MINUTE、およびSECOND間隔を同時に指定します。

    23時間、59分、59.999秒の間隔:

    • インターバル '23:59:59.999 '2番目の時間

    • INTERVAL '-23:59:59.999' 2時間

    INTERVAL '<minute | -minute>:<second>' MINUTE TO SECOND

    MINUTEとSECONDの両方の間隔を指定します。

    59分59.999秒の间隔:

    • インターバル '59:59.999 '分から2番目

    • インターバル '-59:59.999' 分から2番目

  • 有効なパラメーター範囲

    • day: [0, 2147483647] 。

    • hour: [0, 23] 。

    • minute: [0, 59] 。

    • second: [0, 59.999999999] 。

  • 注意事項

    • HOUR、MINUTE、またはSECOND区間のみを指定した場合、値は上限を超える可能性があり、超過分はより大きな単位に変換されます。 次のコードは例を示しています。

      SELECT INTERVAL '24' HOUR; -- Equivalent to INTERVAL '1' DAY
      SELECT INTERVAL '60' MINUTE; -- Equivalent to INTERVAL '1' HOUR
      SELECT INTERVAL '6000' SECOND; -- Equivalent to INTERVAL '1:40' HOUR TO MINUTE
    • その他の用途では、各パラメーターの値が上限を超えてはなりません。 次のコードが正しくありません。

      SELECT INTERVAL '23:60' HOUR TO MINUTE;

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

      FAILED: ODPS-0130161:[1,17] Parse exception - cannot parse 23:60 as a valid INTERVAL_DAY_TIME

操作

シナリオ1: 同じタイプのINTERVAL間の加算と減算

加算と減算は同じタイプのINTERVALでサポートされますが、異なるINTERVAL_DAY_TIMEタイプとINTERVAL_YEAR_MONTHタイプの間ではサポートされません。

  • 例1: INTERVAL_DAY_TIMEタイプ間の追加。

    SELECT INTERVAL '24' HOUR + INTERVAL '23' HOUR;

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

    +------------+
    | _c0        | 
    +------------+
    | 1 23:00:00.000000000 | 
    +------------+
  • 例2: INTERVAL_DAY_TIMEタイプ間の減算。

    SELECT INTERVAL '24' HOUR + INTERVAL '-23' HOUR;

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

    +------------+
    | _c0        | 
    +------------+
    | 0 01:00:00.000000000 | 
    +------------+
  • 例3: INTERVAL_YEAR_MONTHタイプ間の減算。

    SELECT INTERVAL '5-1' YEAR TO MONTH - INTERVAL '9-2' YEAR TO MONTH;

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

    +------------+
    | _c0        | 
    +------------+
    | -4-1       | 
    +------------+
  • 例4 (不正): INTERVAL_DAY_TIMEとINTERVAL_YEAR_MONTHの間の操作はサポートされていません。 次のコードが正しくありません。

    SELECT INTERVAL '2000-1' YEAR TO MONTH + INTERVAL '1 23:59:59.999' DAY TO SECOND;

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

    FAILED: ODPS-0130071:[1,8] Semantic analysis exception - invalid operand type(s) INTERVAL_YEAR_MONTH,INTERVAL_DAY_TIME for operator '+'

シナリオ2: DATE、TIMESTAMP、またはTIMESTAMP_NTZ型の減算の結果、INTERVAL_DAY_TIME型

説明

異なるDATETIMEタイプ間の減算はサポートされていません。

  • 例1: 2つのDATEタイプ間の減算。

    SELECT DATE '2021-10-29' - DATE '2024-11-29';

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

    +------------+
    | _c0        | 
    +------------+
    | -1127 00:00:00.000000000 | 
    +------------+
  • 例2: 2つのTIMESTAMPタイプ間の減算。

    SELECT TIMESTAMP '2024-11-29 00:01:10' - TIMESTAMP'2021-10-29 00:01:00';

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

    +------------+
    | _c0        | 
    +------------+
    | 1127 00:00:10.000000000 | 
    +------------+
  • 例3 (不正): 2つのDATETIMEタイプ間の減算はサポートされていません。 次のコードが正しくありません。

    SELECT DATETIME '2024-11-11 00:00:00' - DATETIME'2021-11-11 00:00:00';

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

    FAILED: ODPS-0130071:[1,8] Semantic analysis exception - invalid operand type(s) DATETIME,DATETIME for operator '-'

シナリオ3: DATE、TIMESTAMP、TIMESTAMP_NTZ型とINTERVAL型の加算と減算の結果、DATE、TIMESTAMP、TIMESTAMP_NTZ型

説明

DATETIME型とINTERVAL型の間の加算と減算はサポートされていません。

  • 例1: INTERVAL_YEAR_MONTHタイプを持つDATEタイプの減算。

    SELECT DATE '2021-11-11' - INTERVAL '-1' MONTH;

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

    +------------+
    | _c0        | 
    +------------+
    | 2021-12-11 | 
    +------------+
  • 例2: INTERVAL_DAY_TIMEタイプからのTIMESTAMP_NTZタイプの減算。

    SELECT TIMESTAMP_NTZ'2024-11-29 00:01:10' - INTERVAL '1 23' DAY TO HOUR;

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

    +------------+
    | _c0        |
    +------------+
    | 2024-11-27 01:01:10 |
    +------------+
  • 例3 (不正): DATETIME型とINTERVAL型の間の加算と減算はサポートされていません。 次のコードが正しくありません。

    SELECT DATETIME '2024-11-11 00:00:00' - INTERVAL '1 23' DAY TO HOUR;

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

    FAILED: ODPS-0130071:[1,8] Semantic analysis exception - invalid operand type(s) DATETIME,INTERVAL_DAY_TIME for operator '-'