全部产品
Search
文档中心

MaxCompute:Tipe data INTERVAL

更新时间:Sep 16, 2025

MaxCompute mendukung empat tipe data terkait tanggal dan waktu: DATE, DATETIME, TIMESTAMP, dan TIMESTAMP_NTZ. MaxCompute juga menyediakan tipe data INTERVAL, yang menunjukkan rentang waktu antara dua tanggal atau waktu. Topik ini menjelaskan penggunaan tipe INTERVAL.

Prasyarat

Untuk menggunakan tipe data INTERVAL, Anda harus mengaktifkan tipe data MaxCompute 2.0 dengan menyetel SET odps.sql.type.system.odps2=true;.

Petunjuk Penggunaan

Tipe data INTERVAL mendukung dua jenis:

  • INTERVAL_YEAR_MONTH: Menyimpan interval tahun-bulan menggunakan bidang YEAR dan MONTH.

  • INTERVAL_DAY_TIME: Menyimpan interval hari-waktu dalam hari, jam, menit, detik, dan fraksi detik.

INTERVAL_YEAR_MONTH

  • Sintaksis

    Format sintaksis

    Deskripsi

    Contoh

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

    Menentukan interval YEAR dan MONTH.

    Interval 120 tahun dan 3 bulan:

    • INTERVAL '120-3' YEAR TO MONTH

    • INTERVAL '-120-3' YEAR TO MONTH

    INTERVAL '<year | -year>' YEAR

    Hanya menentukan interval YEAR.

    Interval 9 tahun:

    • INTERVAL '9' YEAR

    • INTERVAL '-9' YEAR

    INTERVAL '<month | -month>' MONTH

    Hanya menentukan interval MONTH.

    Interval 40 bulan (3 tahun dan 4 bulan):

    • INTERVAL '40' MONTH (setara dengan INTERVAL '3-4' YEAR TO MONTH)

    • INTERVAL '-40' MONTH (setara dengan INTERVAL '-3-4' YEAR TO MONTH)

  • Rentang Parameter Valid

    • year: [0, 9999].

    • month: [0, 11].

  • Perhatian

    • Ketika hanya menentukan interval MONTH, nilai bulan dapat melebihi 11, dengan nilai yang melebihi 11 dikonversi menjadi tahun untuk perhitungan. Kode berikut menunjukkan contohnya:

      SELECT INTERVAL '200' MONTH;

      Hasil kembali:

      +------------+
      | _c0        | 
      +------------+
      | 16-8       | 
      +------------+
    • Ketika menentukan YEAR dan MONTH, nilai bulan tidak boleh melebihi 11. Kode berikut adalah contoh yang salah:

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

      Hasil kembali:

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

INTERVAL_DAY_TIME

  • Sintaksis

    Format sintaksis

    Deskripsi

    Contoh

    INTERVAL '<day | -day>' DAY

    Hanya menentukan interval DAY.

    Interval 1 hari:

    • INTERVAL '1' DAY

    • INTERVAL '-1' DAY

    INTERVAL '<hour | -hour>' HOUR

    Hanya menentukan interval HOUR.

    Interval 1 jam:

    • INTERVAL '1' HOUR

    • INTERVAL '-1' HOUR

    INTERVAL '<minute | -minute>' MINUTE

    Hanya menentukan interval MINUTE.

    Interval 1 menit:

    • INTERVAL '1' MINUTE

    • INTERVAL '-1' MINUTE

    INTERVAL '<second | -second>' SECOND

    Hanya menentukan interval SECOND.

    Interval 1.1 detik:

    • INTERVAL '1.1' SECOND

    • INTERVAL '-1.1' SECOND

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

    Menentukan interval DAY dan HOUR.

    Interval 1 hari dan 23 jam:

    • INTERVAL '1 23' DAY TO HOUR

    • INTERVAL '-1 23' DAY TO HOUR

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

    Menentukan interval DAY, HOUR, dan MINUTE secara bersamaan.

    Interval 1 hari, 23 jam, dan 59 menit:

    • INTERVAL '1 23:59' DAY TO MINUTE

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

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

    Menentukan interval DAY, HOUR, MINUTE, dan SECOND secara bersamaan.

    Interval 1 hari, 23 jam, 59 menit, dan 59.999 detik:

    • INTERVAL '1 23:59:59.999' DAY TO SECOND

    • INTERVAL '-1 23:59:59.999' DAY TO SECOND

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

    Menentukan interval HOUR dan MINUTE.

    Interval 23 jam dan 59 menit:

    • INTERVAL '23:59' HOUR TO MINUTE

    • INTERVAL '-23:59' HOUR TO MINUTE

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

    Menentukan interval HOUR, MINUTE, dan SECOND secara bersamaan.

    Interval 23 jam, 59 menit, dan 59.999 detik:

    • INTERVAL '23:59:59.999' HOUR TO SECOND

    • INTERVAL '-23:59:59.999' HOUR TO SECOND

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

    Menentukan interval MINUTE dan SECOND.

    Interval 59 menit dan 59.999 detik:

    • INTERVAL '59:59.999' MINUTE TO SECOND

    • INTERVAL '-59:59.999' MINUTE TO SECOND

  • Rentang Parameter Valid

    • day: [0, 2147483647].

    • hour: [0, 23].

    • minute: [0, 59].

    • second: [0, 59.999999999].

  • Perhatian

    • Ketika hanya menentukan interval HOUR, MINUTE, atau SECOND, nilainya dapat melebihi batas atas, dan kelebihannya akan dikonversi ke unit yang lebih besar. Kode berikut menunjukkan contohnya:

      SELECT INTERVAL '24' HOUR; -- Setara dengan INTERVAL '1' DAY
      SELECT INTERVAL '60' MINUTE; -- Setara dengan INTERVAL '1' HOUR
      SELECT INTERVAL '6000' SECOND; -- Setara dengan INTERVAL '1:40' HOUR TO MINUTE
    • Pada penggunaan lainnya, nilai setiap parameter tidak boleh melebihi batas atas. Kode berikut salah:

      SELECT INTERVAL '23:60' HOUR TO MINUTE;

      Hasil kembali:

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

Operasi

Skenario 1: Penjumlahan dan pengurangan antar tipe INTERVAL yang sama

Penjumlahan dan pengurangan didukung pada tipe INTERVAL yang sama, tetapi tidak didukung antara tipe INTERVAL_DAY_TIME dan INTERVAL_YEAR_MONTH yang berbeda.

  • Contoh 1: Penjumlahan antar tipe INTERVAL_DAY_TIME.

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

    Hasil kembali:

    +------------+
    | _c0        | 
    +------------+
    | 1 23:00:00.000000000 | 
    +------------+
  • Contoh 2: Pengurangan antar tipe INTERVAL_DAY_TIME.

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

    Hasil kembali:

    +------------+
    | _c0        | 
    +------------+
    | 0 01:00:00.000000000 | 
    +------------+
  • Contoh 3: Pengurangan antar tipe INTERVAL_YEAR_MONTH.

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

    Hasil kembali:

    +------------+
    | _c0        | 
    +------------+
    | -4-1       | 
    +------------+
  • Contoh 4 (salah): Operasi antara INTERVAL_DAY_TIME dan INTERVAL_YEAR_MONTH tidak didukung. Kode berikut salah:

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

    Hasil kembali:

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

Skenario 2: Pengurangan tipe DATE, TIMESTAMP, atau TIMESTAMP_NTZ menghasilkan tipe INTERVAL_DAY_TIME

Catatan

Pengurangan antara tipe DATETIME yang berbeda tidak didukung.

  • Contoh 1: Pengurangan antara dua tipe DATE.

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

    Hasil kembali:

    +------------+
    | _c0        | 
    +------------+
    | -1127 00:00:00.000000000 | 
    +------------+
  • Contoh 2: Pengurangan antara dua tipe TIMESTAMP.

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

    Hasil kembali:

    +------------+
    | _c0        | 
    +------------+
    | 1127 00:00:10.000000000 | 
    +------------+
  • Contoh 3 (salah): Pengurangan antara dua tipe DATETIME tidak didukung. Kode berikut salah:

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

    Hasil kembali:

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

Skenario 3: Penjumlahan dan pengurangan tipe DATE, TIMESTAMP, TIMESTAMP_NTZ dengan tipe INTERVAL menghasilkan tipe DATE, TIMESTAMP, TIMESTAMP_NTZ

Catatan

Penjumlahan dan pengurangan antara tipe DATETIME dan tipe INTERVAL tidak didukung.

  • Contoh 1: Pengurangan tipe DATE dengan tipe INTERVAL_YEAR_MONTH.

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

    Hasil kembali:

    +------------+
    | _c0        | 
    +------------+
    | 2021-12-11 | 
    +------------+
  • Contoh 2: Pengurangan tipe TIMESTAMP_NTZ dengan tipe INTERVAL_DAY_TIME.

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

    Hasil kembali:

    +------------+
    | _c0        |
    +------------+
    | 2024-11-27 01:01:10 |
    +------------+
  • Contoh 3 (salah): Penjumlahan dan pengurangan antara tipe DATETIME dan tipe INTERVAL tidak didukung. Kode berikut salah:

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

    Hasil kembali:

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