All Products
Search
Document Center

MaxCompute:DATEADD

Last Updated:Oct 23, 2025

Fungsi ini menambahkan interval tertentu delta ke tanggal date atau timestamp berdasarkan unit waktu datepart.

Catatan penggunaan

Anda dapat menggunakan fungsi ini bersama dengan fungsi GETDATE untuk mendapatkan tanggal dengan menambahkan interval tertentu ke waktu saat ini.

Sintaks

DATEADD(DATE|DATETIME|TIMESTAMP|TIMESTAMP_NTZ <date>, BIGINT <delta>, STRING <datepart>)

Parameter

  • date: Diperlukan. Nilai tanggal atau timestamp. Parameter ini mendukung tipe data DATE, DATETIME, TIMESTAMP, dan TIMESTAMP_NTZ.

    Dalam MaxCompute edisi tipe data 1.0, jika parameter ini adalah STRING dalam format yyyy-mm-dd hh:mi:ss, seperti 2025-07-21 00:00:00, maka akan dikonversi secara implisit ke tipe DATETIME.

  • delta: Diperlukan. Interval yang ingin ditambahkan. Parameter ini bertipe BIGINT. Jika nilai dari delta lebih besar dari 0, interval ditambahkan; sebaliknya, interval dikurangi.

    Dalam MaxCompute edisi tipe data 1.0, jika parameter ini adalah nilai STRING atau DOUBLE, maka akan dikonversi secara implisit ke tipe BIGINT.

    Catatan
    • Ketika Anda menambahkan atau mengurangi interval yang ditentukan oleh delta, mungkin terjadi carry atau borrow pada unit waktu yang lebih signifikan. Komponen tahun, bulan, jam, menit, dan detik dihitung menggunakan sistem angka basis-10, basis-12, basis-24, dan basis-60, masing-masing.

    • Ketika unit untuk delta adalah bulan, jika penambahan nilai delta untuk interval delta tidak menyebabkan Day overflow, nilai Hari tetap tidak berubah. Sebaliknya, nilai Hari disetel ke hari terakhir dari bulan hasil.

  • datepart: Diperlukan. Unit waktu dari interval. Parameter ini adalah STRING konstan. Jika Anda menentukan nilai non-konstan, format yang tidak didukung, atau tipe data lain, kesalahan akan dikembalikan. Nilai-nilai berikut didukung:

    Unit waktu

    Nilai

    Tahun

    year atau yyyy

    Kuartal

    quarter atau q

    Bulan

    month, mon, atau mm

    Minggu

    week

    Hari

    day atau dd

    Jam

    hour atau hh

    Menit

    mi

    Kedua,

    ss

    Milidetik

    ff3

    Mikrodetik

    ff6

Nilai kembali

Mengembalikan nilai bertipe DATE, DATETIME, TIMESTAMP, atau TIMESTAMP_NTZ. Tipe data dari nilai kembali sama dengan tipe data dari parameter input date. Aturan berikut berlaku:

  • Jika tipe data dari parameter date bukan DATE, DATETIME, TIMESTAMP, atau TIMESTAMP_NTZ, kesalahan akan dikembalikan.

  • Jika nilai dari parameter date adalah NULL, kesalahan akan dikembalikan.

  • Jika nilai dari parameter delta atau datepart adalah NULL, NULL akan dikembalikan.

Contoh

  • Contoh 1: Penggunaan umum data statis

    -- Nilai kembali adalah 2005-03-01 00:00:00. Satu hari ditambahkan. Hasil melebihi hari terakhir Februari tahun itu. Nilai sebenarnya adalah hari pertama bulan berikutnya.
    SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 1, 'dd');
    -- Nilai kembali adalah 2005-02-27 00:00:00. Satu hari dikurangi.
    SELECT DATEADD(DATETIME '2005-02-28 00:00:00', -1, 'dd');
    -- Nilai kembali adalah 2006-10-28 00:00:00. 20 bulan ditambahkan. Bulan meluap, dan tahun bertambah 1.
    SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 20, 'mm');
    -- Nilai kembali adalah 2005-03-28 00:00:00.
    SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 1, 'mm');
    -- Nilai kembali adalah 2005-02-28 00:00:00. Februari 2005 tidak memiliki hari ke-29. Tanggal dipotong menjadi hari terakhir bulan tersebut.
    SELECT DATEADD(DATETIME '2005-01-29 00:00:00', 1, 'mm');
    -- Nilai kembali adalah 2005-02-28 00:00:00.
    SELECT DATEADD(DATETIME '2005-03-30 00:00:00', -1, 'mm');
    -- Nilai kembali adalah 2005-05-28.
    SELECT DATEADD(DATE '2005-02-28', 1, 'quarter');
    -- Nilai kembali adalah 2005-03-18.
    SELECT DATEADD(DATE '2005-02-18', 1, 'mm');
    -- Nilai kembali adalah 2005-03-14 00:00:00.
    SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 2, 'week');
    -- Nilai kembali adalah 2005-03-14 00:00:00.123.
    SELECT DATEADD(TIMESTAMP '2005-02-28 00:00:00.123', 14, 'day');
    -- Nilai kembali adalah 2005-03-30 02:24:00. 3 jam dikurangi. 
    SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -3, 'hh');
    -- Nilai kembali adalah 2005-03-30 04:54:00. 30 menit dikurangi. 
    SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -30, 'mi');
    -- Nilai kembali adalah 2005-03-30 05:23:30. 30 detik dikurangi. 
    SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -30, 'ss');
    -- Nilai kembali adalah 2005-02-28 00:00:01.123456.
    SELECT DATEADD(TIMESTAMP_NTZ '2005-02-28 00:00:00.123456', 1000, 'ff3');
    -- Nilai kembali adalah 2005-02-28 00:00:00.124456.
    SELECT DATEADD(TIMESTAMP '2005-02-28 00:00:00.123456', 1000, 'ff6');
    
    -- Aktifkan edisi tipe data MaxCompute 2.0. Perintah ini harus diajukan bersama dengan pernyataan SQL. Nilai kembali adalah 2005-03-18 00:00:00.0.
    set odps.sql.type.system.odps2=true;
    SELECT DATEADD(TIMESTAMP '2005-02-18 00:00:00', 1, 'mm');
    -- Asumsikan waktu saat ini adalah 2020-11-17 16:31:44. Nilai kembali adalah 2020-11-16 16:31:44.
    SELECT DATEADD(GETDATE(), -1, 'dd');
    -- NULL dikembalikan.
    SELECT DATEADD(DATE '2005-02-18', 1, NULL);
  • Contoh 2: Deskripsi tipe parameter date

    • Untuk MaxCompute edisi tipe data 2.0, jika tipe data dari parameter date bukan DATE, DATETIME, TIMESTAMP, atau TIMESTAMP_NTZ, Anda harus mengonversi tipe data. Jika tidak, kesalahan akan dikembalikan.

      SELECT DATEADD(CAST('2005-03-30 00:00:00' AS datetime), -1, 'mm');
      
      -- Hasil berikut dikembalikan.
      +------------+
      | _c0        | 
      +------------+
      | 2005-02-28 00:00:00 | 
      +------------+
    • Untuk MaxCompute edisi tipe data 1.0, jika parameter date adalah STRING dalam format yyyy-mm-dd hh:mi:ss, maka akan dikonversi secara implisit ke tipe DATETIME.

      -- Setel edisi tipe data ke 1.0.
      SET odps.sql.type.system.odps2=false;
      SET odps.sql.hive.compatible=false;
      
      -- Contoh salah: Parameter input berikut adalah tipe STRING tetapi tidak sesuai dengan format DATETIME. NULL dikembalikan.
      SELECT DATEADD('2021-08-27',1,'dd');
      
      -- Contoh benar: Parameter input berikut adalah tipe STRING dan sesuai dengan format DATETIME.
      SELECT DATEADD('2005-02-28 00:00:00', 1000000000, 'ff6');
      
      -- Hasil berikut dikembalikan.
      +------------+
      | _c0        | 
      +------------+
      | 2005-02-28 00:16:40 | 
      +------------+

Fungsi terkait

DATEADD adalah fungsi tanggal. Untuk informasi lebih lanjut tentang fungsi terkait perhitungan dan konversi tanggal, lihat Fungsi Tanggal.