Lewati ke konten utama

Snowflake DATEADD: Panduan Lengkap dengan Contoh Praktis

Pelajari cara menggunakan fungsi DATEADD di Snowflake untuk manipulasi tanggal dengan contoh dunia nyata. Kuasai perhitungan waktu, tangani kasus tepi, dan optimalkan kinerja dalam kueri SQL Anda.
Diperbarui 28 Sep 2026  · 10 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Fungsi Snowflake DATEADD adalah metode yang relatif sederhana namun kuat untuk melakukan berbagai operasi aritmetika tanggal, yang memungkinkan profesional data menambah atau mengurangi interval waktu tertentu dari nilai date, time, atau timestamp. 

Memahami cara menggunakan DATEADD akan membantu analis dan/atau engineer data melakukan analisis bermanfaat dengan menghitung periode langganan, membangun proyeksi untuk tanggal di masa mendatang, dan bahkan menghasilkan dataset deret waktu untuk analisis lanjutan. 

Dalam tutorial ini, Anda akan mempelajari sintaks fungsi, cara penerapannya dalam praktik, dan potensi keseluruhan fungsi DATEADD dalam gudang senjata manipulasi tanggal Anda di Snowflake SQL.

Jika Anda baru mulai menggunakan Snowflake, pastikan untuk mengecek jalur keterampilan Snowflake Foundations. 

Menyiapkan Basis Data Contoh untuk Praktik

Sebelum kita masuk ke detail DATEADD, mari kita buat basis data contoh dengan data kaya tanggal agar contoh kita lebih praktis dan langsung. Bekerja dengan data nyata akan membantu memperkuat konsep saat kita mempelajari kemampuan fungsi ini.

1. Membuat akun Snowflake (untuk pengguna baru)

Jika Anda baru di Snowflake, Anda perlu membuat akun uji coba gratis yang menyediakan kredit selama 30 hari. Untuk pengantar komprehensif tentang platform ini, lihat kursus Introduction to Snowflake, yang membahas dasar dan fundamentalnya.

2. Menyiapkan worksheet Anda

Di Snowflake, kueri SQL dieksekusi dalam “Worksheet” (mirip dengan notebook). Untuk membuat worksheet baru:

  1. Masuk ke akun Snowflake Anda
  2. Arahkan ke Worksheets dari menu utama
  3. Klik tombol “+” untuk membuat worksheet baru
  4. Beri nama “DATEADD_Practice”

Jika Anda benar-benar baru dengan antarmuka Snowflake, Snowflake Tutorial For Beginners ini memberikan panduan lengkap tentang platformnya.

3. Memilih database dan skema

Untuk tutorial ini, kita akan menggunakan database Snowflake Learning dan skema public:

-- Create database and schema
USE DATABASE SNOWFLAKE_LEARNING_DB;
USE SCHEMA PUBLIC;

4. Menghasilkan data sintetis dan tabel

Kita akan membuat tiga tabel dengan data terkait tanggal untuk mendemonstrasikan ‘DATEADD’ dalam berbagai skenario:

Catatan: Gunakan “Command + Shift + Enter”/”Ctrl + Shift + Enter” untuk menjalankan perintah berikut sekaligus di worksheet Anda:

-- Create subscription table
CREATE OR REPLACE TABLE subscriptions (
   subscription_id INTEGER,
   customer_id INTEGER,
   plan_name VARCHAR(50),
   start_date DATE,
   end_date DATE,
   billing_cycle VARCHAR(20)
);

-- Create orders table with timestamps
CREATE OR REPLACE TABLE orders (
   order_id INTEGER,
   customer_id INTEGER,
   order_timestamp TIMESTAMP_NTZ,
   delivery_estimate TIMESTAMP_NTZ,
   total_amount DECIMAL(10,2)
);

-- Create events table with time zones
CREATE OR REPLACE TABLE events (
   event_id INTEGER,
   event_name VARCHAR(100),
   event_timestamp TIMESTAMP_TZ,
   duration_minutes INTEGER
);

Untuk detail lebih lanjut tentang pembuatan tabel, termasuk berbagai tipe tabel dan praktik terbaik, lihat Creating Tables in Snowflake.

Petunjuk: Anda sebaiknya menghapus semua kueri yang ada dari worksheet setelah berhasil dieksekusi.

5. Mengisi tabel dengan data contoh

Mari masukkan data contoh dengan berbagai nilai tanggal dan waktu:

-- Insert subscription data
INSERT INTO subscriptions VALUES
   (1001, 5001, 'Basic', '2023-01-15', '2023-07-15', 'Monthly'),
   (1002, 5002, 'Premium', '2023-02-28', '2024-02-28', 'Annual'),
   (1003, 5003, 'Premium', '2023-01-31', '2023-04-30', 'Quarterly'),
   (1004, 5001, 'Pro', '2022-12-15', '2023-12-15', 'Annual'),
   (1005, 5004, 'Basic', '2023-03-15', NULL, 'Monthly');

-- Insert orders with timestamps
INSERT INTO orders VALUES
   (10001, 5001, '2023-03-10 08:30:00', '2023-03-12 14:00:00', 125.99),
   (10002, 5002, '2023-03-10 12:15:30', '2023-03-11 09:00:00', 89.50),
   (10003, 5003, '2023-03-09 17:45:20', '2023-03-15 13:30:00', 245.00),
   (10004, 5001, '2023-02-28 23:59:59', '2023-03-05 10:00:00', 49.99),
   (10005, 5004, '2023-03-01 00:00:01', '2023-03-02 12:00:00', 175.25);

-- Insert events
INSERT INTO events VALUES
   (101, 'System Update', '2023-03-15 01:00:00'::TIMESTAMP_TZ, 120),
   (102, 'Maintenance', '2023-03-20 22:00:00'::TIMESTAMP_TZ, 60),
   (103, 'Data Migration', '2023-03-18 15:30:00'::TIMESTAMP_TZ, 180),
   (104, 'Backup', '2023-03-10 03:00:00'::TIMESTAMP_TZ, 45),
   (105, 'Security Audit', '2023-03-12 09:15:00'::TIMESTAMP_TZ, 90);

6. Memvalidasi data contoh

Mari jalankan beberapa kueri dasar untuk memverifikasi bahwa data kita dimuat dengan benar:

-- Check subscription data
SELECT * FROM subscriptions;

-- Check orders data
SELECT * FROM orders;

-- Check events data
SELECT * FROM events;

Sekarang kita memiliki basis data contoh yang fungsional dengan tiga tabel yang berisi format date dan timestamp yang berbeda. Dataset ini akan menjadi dasar kita untuk mengeksplorasi fungsi DATEADD di sisa tutorial ini.

Memahami Snowflake DATEADD: Sintaks dan Parameter

Fungsi DATEADD penting untuk operasi aritmetika tanggal di Snowflake. Fungsi ini memungkinkan Anda menambah atau mengurangi interval waktu tertentu dari nilai date, time, atau timestamp. Mari kita uraikan cara kerja fungsi ini, dimulai dari sintaks dan parameternya.

Sintaks dan parameter fungsi

Sintaks dasar fungsi DATEADD adalah:

DATEADD(date_part, value, date_or_timestamp_expression)

Mari kita telusuri setiap parameter:

-- Basic DATEADD example
SELECT
   DATEADD(MONTH, 3, '2023-01-15') AS three_months_later;

Penjelasan: Kueri ini menambahkan 3 bulan ke 15 Januari 2023. Parameter bekerja sebagai berikut:

  • date_part (MONTH): Menentukan unit waktu yang kita tambahkan atau kurangi
  • value (3): Jumlah unit yang akan ditambahkan (positif) atau dikurangkan (negatif)
  • date_or_timestamp_expression ('2023-01-15'): Tanggal awal yang akan dimodifikasi

Keluaran:

THREE_MONTHS_LATER

-----------------

2023-04-15

Bagian tanggal yang didukung

Snowflake mendukung berbagai date part yang dapat digunakan dengan DATEADD:

-- Examples of different date parts
SELECT
   DATEADD(YEAR, 1, '2023-02-28') AS add_one_year,
   DATEADD(QUARTER, 2, '2023-01-31') AS add_two_quarters,
   DATEADD(MONTH, 3, '2023-01-31') AS add_three_months,
   DATEADD(WEEK, 2, '2023-03-15') AS add_two_weeks,
   DATEADD(DAY, 10, '2023-03-21') AS add_ten_days,
   DATEADD(HOUR, 12, '2023-03-10 08:30:00') AS add_twelve_hours,
   DATEADD(MINUTE, 45, '2023-03-10 08:30:00') AS add_forty_five_minutes,
   DATEADD(SECOND, 30, '2023-03-10 08:30:00') AS add_thirty_seconds;

Bagian tanggal tambahan yang didukung mencakup MILLISECOND, MICROSECOND, NANOSECOND, dan CENTURY.

Perlu dicatat bahwa pada tahun kabisat dan untuk tanggal akhir bulan, Snowflake melakukan penyesuaian yang sesuai. Misalnya, menambahkan satu tahun ke 28 Februari 2023 menghasilkan 29 Februari 2024 (tahun kabisat).

Menggunakan nilai negatif untuk pengurangan

Fungsi DATEADD juga dapat mengurangi interval waktu dengan menggunakan nilai negatif:

-- Subtracting time intervals with negative values
SELECT
   DATEADD(MONTH, -3, '2023-03-15') AS three_months_ago,
   DATEADD(DAY, -7, CURRENT_DATE()) AS one_week_ago,
   DATEADD(HOUR, -48, CURRENT_TIMESTAMP()) AS two_days_ago_time;

Penjelasan:

  • Ekspresi pertama mengurangkan 3 bulan dari 15 Maret 2023
  • Ekspresi kedua mengurangkan 7 hari dari tanggal hari ini
  • Ekspresi ketiga mengurangkan 48 jam (2 hari) dari timestamp saat ini

Keluaran:

THREE_MONTHS_AGO    ONE_WEEK_AGO    TWO_DAYS_AGO_TIME

----------------    ------------    -----------------

2025-02-10          2025-05-03      2025-05-08 07:22:30.183 -0700

Perilaku tipe nilai kembali

Tipe nilai kembali dari DATEADD bergantung pada tipe ekspresi input:

  • Saat diterapkan pada DATE, ia mengembalikan DATE
  • Saat diterapkan pada TIMESTAMP, ia mengembalikan TIMESTAMP
  • Saat diterapkan pada TIME, ia mengembalikan TIME

DATEADD mempertahankan tipe data asli dari input Anda. Perilaku ini penting untuk dipahami karena memengaruhi cara Anda dapat menggunakan hasilnya dalam operasi berikutnya. 

Sebagai contoh, jika Anda menambahkan jam ke nilai DATE, hasilnya tetap berupa DATE (artinya bagian waktu terpotong), sedangkan menambahkan jam ke TIMESTAMP akan mempertahankan komponen tanggal dan waktu.

Memahami parameter inti dan perilaku DATEADD ini akan menjadi fondasi untuk kasus penggunaan lebih lanjut yang akan kita jelajahi di bagian berikutnya.

Contoh dan Use Case DATEADD yang Praktis

Sekarang kita memahami sintaks dan perilaku DATEADD, mari kita jelajahi penerapan praktis menggunakan data contoh kita. Di bagian ini, kita akan menunjukkan bagaimana DATEADD dapat menyelesaikan masalah bisnis nyata dan meningkatkan kemampuan analisis data.

Menghitung tanggal perpanjangan langganan

Salah satu kebutuhan bisnis umum adalah menentukan kapan langganan akan diperpanjang berdasarkan siklus penagihannya:

-- Calculate subscription renewal dates
SELECT
   subscription_id,
   customer_id,
   plan_name,
   start_date,
   billing_cycle,
   CASE
       WHEN billing_cycle = 'Monthly' THEN DATEADD(MONTH, 1, start_date)
       WHEN billing_cycle = 'Quarterly' THEN DATEADD(MONTH, 3, start_date)
       WHEN billing_cycle = 'Annual' THEN DATEADD(YEAR, 1, start_date)
   END AS first_renewal_date
FROM subscriptions;

Penjelasan: Kueri ini menghitung tanggal perpanjangan pertama untuk setiap langganan berdasarkan siklus penagihannya. Kita menggunakan DATEADD dengan bagian tanggal (MONTH atau YEAR) dan nilai (1, 3, atau 1) yang berbeda tergantung siklus penagihan.

Keluaran:

Hasil kueri snowflake yang menggunakan fungsi dateadd

Perhatikan bagaimana Snowflake menangani transisi 28 Februari ke 28 Februari (tahun kabisat) dengan benar.

Memprediksi jendela pengiriman

Mari gunakan DATEADD untuk menghitung perkiraan jendela pengiriman untuk pesanan:

-- Calculate delivery windows based on order timestamps
SELECT
   order_id,
   customer_id,
   order_timestamp,
   delivery_estimate,
   DATEADD(HOUR, -12, delivery_estimate) AS delivery_window_start,
   delivery_estimate AS delivery_window_end,
   DATEDIFF('HOUR', order_timestamp, delivery_estimate) AS estimated_hours_to_delivery
FROM orders
ORDER BY order_id;

Penjelasan: Kueri ini:

  1. Menciptakan jendela pengiriman 12 jam dengan mengurangkan 12 jam dari perkiraan waktu pengiriman
  2. Menampilkan awal dan akhir jendela pengiriman
  3. Menghitung total waktu pengiriman yang diperkirakan dalam jam

Keluaran:

Hasil kueri snowflake yang menggunakan fungsi dateadd

Membuat tabel dimensi tanggal

Analisis deret waktu sering memerlukan tabel dimensi tanggal. Mari kita buat menggunakan DATEADD:

-- Generate a date dimension table for analysis
WITH date_dimension AS (
   SELECT
       DATEADD(DAY, seq4(), '2023-01-01') AS calendar_date
   FROM TABLE(GENERATOR(ROWCOUNT => 365))
)
SELECT
   calendar_date,
   YEAR(calendar_date) AS year,
   MONTH(calendar_date) AS month,
   MONTHNAME(calendar_date) AS month_name,
   DAY(calendar_date) AS day,
   DAYOFWEEK(calendar_date) AS day_of_week,
   DAYNAME(calendar_date) AS day_name,
   CASE
       WHEN DAYOFWEEK(calendar_date) IN (0, 6) THEN TRUE
       ELSE FALSE
   END AS is_weekend,
   QUARTER(calendar_date) AS quarter
FROM date_dimension
WHERE calendar_date <= '2023-03-31'
ORDER BY calendar_date
LIMIT 10;

Penjelasan: Kueri ini:

  1. Menggunakan DATEADD dengan generator urutan untuk membuat rangkaian tanggal untuk tahun 2023
  2. Mengekstrak atribut tanggal yang berguna untuk setiap tanggal kalender
  3. Memfilter ke Q1 2023 dan menampilkan 10 hari pertama agar ringkas

Keluaran:

Hasil kueri snowflake yang menggunakan fungsi dateadd

Tabel dimensi tanggal secara signifikan meningkatkan kinerja analitik dengan melakukan pra-perhitungan atribut tanggal alih-alih menghitungnya berulang kali dalam kueri. Tabel ini menstandarkan logika tanggal di seluruh organisasi, memastikan definisi yang konsisten untuk kuartal, akhir pekan, dan periode waktu lainnya. 

Pendekatan ini mengurangi kesalahan dan membuat analisis berbasis waktu yang kompleks lebih mudah diakses oleh pengguna bisnis. Dimensi tanggal juga memungkinkan penyaringan dan pengelompokan yang efisien berdasarkan berbagai hierarki waktu seperti tahun, kuartal, bulan, dan hari.

Fungsi DATEADD dengan pembuatan urutan menawarkan metode sederhana untuk mengisi tabel dimensi ini tanpa entri data manual. 

Teknik ini dapat diperluas untuk membuat kalender multiyear atau dimensi waktu khusus seperti kalender fiskal atau perhitungan hari kerja. Kolom tambahan dapat mencakup penanda hari libur, nomor pekan, atau penetapan periode bisnis khusus yang penting untuk pelaporan yang akurat. 

Setelah dibuat, tabel dimensi ini dapat digabungkan dengan tabel fakta untuk mengaktifkan kapabilitas kecerdasan waktu yang kuat dalam dashboard dan laporan.

Menganalisis event terjadwal

Mari gunakan DATEADD untuk menganalisis jadwal pemeliharaan yang akan datang:

-- Find upcoming events and calculate preparation time
SELECT
   event_id,
   event_name,
   event_timestamp,
   duration_minutes,
   DATEADD(DAY, -3, event_timestamp) AS preparation_start,
   DATEADD(MINUTE, duration_minutes, event_timestamp) AS event_end,
   DATEDIFF('MINUTE', CURRENT_TIMESTAMP(), event_timestamp) AS minutes_until_event
FROM events
WHERE event_timestamp > CURRENT_TIMESTAMP()
ORDER BY event_timestamp;

Penjelasan: Kueri ini:

  1. Menemukan event yang akan datang (yang berada di masa depan)
  2. Menghitung kapan persiapan harus dimulai (3 hari sebelum event)
  3. Menghitung kapan event akan berakhir berdasarkan durasinya
  4. Menampilkan berapa menit tersisa hingga event dimulai

Karena semua data contoh kita berasal dari tahun 2023, kueri ini biasanya tidak akan menampilkan hasil pada 2025, tetapi secara konseptual menunjukkan cara menganalisis event terjadwal.

Menghitung periode penagihan

Untuk bisnis berbasis langganan, menghitung periode penagihan yang tepat sangat penting:

-- Generate next 6 billing periods for monthly subscriptions
WITH billing_periods AS (
   SELECT
       subscription_id,
       customer_id,
       plan_name,
       start_date,
       seq AS billing_period_number,
       DATEADD(MONTH, seq, start_date) AS billing_period_start,
       DATEADD(DAY, -1, DATEADD(MONTH, seq + 1, start_date)) AS billing_period_end
   FROM subscriptions
   CROSS JOIN (SELECT seq4() AS seq FROM TABLE(GENERATOR(ROWCOUNT => 6)))
   WHERE billing_cycle = 'Monthly'
)
SELECT
   subscription_id,
   customer_id,
   plan_name,
   billing_period_number,
   billing_period_start,
   billing_period_end,
   DATEDIFF('DAY', billing_period_start, billing_period_end) + 1 AS days_in_period
FROM billing_periods
ORDER BY subscription_id, billing_period_number;

Penjelasan: Kueri ini:

  1. Menghasilkan 6 periode penagihan berikutnya untuk langganan bulanan menggunakan CROSS JOIN dengan generator urutan (seq4())
  2. Menghitung tanggal mulai dengan menambahkan bulan berdasarkan nomor periode menggunakan DATEADD(MONTH, seq, start_date)
  3. Menghitung tanggal akhir sebagai satu hari sebelum periode berikutnya dimulai dengan DATEADD(DAY, -1, DATEADD(MONTH, seq + 1, start_date)) Ini memastikan penanganan panjang bulan yang bervariasi (28/29/30/31 hari)
  4. Menghitung jumlah hari dalam setiap periode penagihan menggunakan DATEDIFF('DAY', billing_period_start, billing_period_end) + 1 Tambahan +1 diperlukan karena DATEDIFF mengembalikan selisih antar tanggal, tidak termasuk tanggal akhir
  5. Memfilter agar hanya menyertakan langganan bulanan dengan klausa WHERE
  6. Mengurutkan hasil berdasarkan subscription_id dan periode penagihan untuk penyajian yang logis

Keluaran:

Hasil kueri snowflake yang menggunakan fungsi dateadd

Perhatikan bagaimana DATEADD menangani panjang bulan yang berbeda dengan tepat, memastikan perhitungan periode penagihan yang akurat.

Contoh-contoh ini menunjukkan bagaimana DATEADD dapat diterapkan untuk menyelesaikan masalah bisnis umum yang melibatkan manipulasi tanggal. Dengan menggabungkan DATEADD dengan fungsi SQL lainnya, Anda dapat membuat kueri yang kuat untuk analisis berbasis waktu dan pemrosesan data di Snowflake.

Membandingkan DATEADD dengan Fungsi Terkait di Snowflake

Sekarang mari kita lihat bagaimana fungsi DATEADD dibandingkan dengan beberapa fungsi lain di Snowflake. 

DATEADD vs DATEDIFF dan DATE_TRUNC

Sementara DATEADD menambah atau mengurangkan interval waktu tertentu ke suatu tanggal, DATEDIFF menghitung selisih antara dua tanggal dalam unit yang ditentukan. DATEDIFF mengembalikan integer yang merepresentasikan jumlah unit lengkap antar tanggal, menjadikannya ideal untuk menghitung durasi seperti lamanya langganan atau hari sejak pemesanan.

DATE_TRUNC, sebaliknya, menghapus presisi dari nilai tanggal/waktu dengan mengatur bagian tanggal yang lebih kecil ke nilai defaultnya, secara efektif membulatkan ke bawah ke unit yang ditentukan.

-- Comparing the three functions
SELECT
   DATEADD(MONTH, 3, '2023-01-15'::DATE) AS added_three_months,
   DATEDIFF(DAY, '2023-01-15'::DATE, '2023-04-15'::DATE) AS days_between,
   DATE_TRUNC(MONTH, '2023-01-15'::DATE) AS truncated_to_month;

Keluaran:

Hasil kueri snowflake yang menggunakan fungsi dateadd

Kapan menggunakan masing-masing fungsi (kriteria keputusan)

Gunakan DATEADD saat Anda perlu menggeser tanggal maju atau mundur dengan interval waktu tertentu, seperti menghitung tanggal perpanjangan di masa depan, jendela pengiriman, atau jadwal pembayaran. 

Pilih DATEDIFF saat mengukur waktu yang berlalu antara dua tanggal, seperti menghitung usia, durasi, atau metrik berbasis waktu untuk pelaporan.

 DATE_TRUNC paling tepat digunakan saat Anda perlu mengelompokkan data berdasarkan periode waktu (harian, bulanan, triwulanan), menstandarkan timestamp ke tingkat presisi yang konsisten, atau membuat hierarki berbasis waktu untuk analisis.

-- Function usage by scenario
SELECT
   -- Scenario: Calculate next month's billing date
   DATEADD(MONTH, 1, start_date) AS next_billing_date,
  
   -- Scenario: Find how many days the subscription has been active
   DATEDIFF(DAY, start_date, CURRENT_DATE()) AS subscription_age_days,
  
   -- Scenario: Group by month for analysis
   DATE_TRUNC(MONTH, start_date) AS billing_month
FROM subscriptions
LIMIT 3;

Hasil kueri snowflake yang menggunakan fungsi dateadd

Menangani Kasus Tepi dan Pemecahan Masalah

Jika Anda mengalami masalah saat menggunakan fungsi ini, berikut beberapa tips yang dapat membantu Anda keluar dari kesulitan. 

Penyesuaian akhir bulan dan tahun kabisat

Snowflake menangani tanggal akhir bulan secara cerdas saat menggunakan DATEADD. Saat menambahkan bulan ke tanggal akhir bulan, Snowflake mengembalikan hari terakhir di bulan hasil, terlepas dari jumlah harinya. Perilaku ini mempertahankan konsep "akhir bulan" bahkan ketika panjang bulan berbeda.

-- Month-end handling examples
SELECT
   DATEADD(MONTH, 1, '2023-01-31') AS jan_to_feb,   -- January 31 + 1 month = February 28
   DATEADD(MONTH, 1, '2023-02-28') AS feb_to_mar,   -- February 28 + 1 month = March 31
   DATEADD(MONTH, 1, '2024-01-31') AS jan_to_feb_leap, -- January 31 + 1 month in leap year = February 29
   DATEADD(YEAR, 1, '2023-02-28') AS normal_to_leap;   -- February 28, 2023 + 1 year = February 29, 2024

Pertimbangan zona waktu dan daylight saving

Saat bekerja dengan data timestamp yang menyertakan zona waktu (TIMESTAMP_TZ), DATEADD secara otomatis memperhitungkan transisi daylight saving time. Ini memastikan perhitungan tetap akurat melintasi perubahan waktu, namun terkadang dapat menghasilkan hasil yang tidak terduga saat menambahkan interval tertentu di sekitar batas DST.

-- Time zone handling with DST transition
SELECT
   event_timestamp,
   DATEADD(HOUR, 24, event_timestamp) AS add_24h,
   DATEADD(DAY, 1, event_timestamp) AS add_1d
FROM (
   SELECT CONVERT_TIMEZONE('America/Los_Angeles', '2023-03-12 01:30:00')::TIMESTAMP_TZ AS event_timestamp
); -- During spring forward DST transition

Saat bekerja dengan timestamp di sekitar transisi DST, perlu diingat bahwa menambahkan 24 jam mungkin tidak sama dengan menambahkan 1 hari. Pendekatan “add_1d" umumnya menghasilkan hasil yang lebih intuitif dalam aplikasi bisnis.

Kesalahan umum dan solusinya

Kesalahan DATEADD biasanya berasal dari ketidakcocokan tipe atau input tidak valid. Berikut masalah umum dan solusinya:

-- Common error: Invalid date part
-- Error: "Invalid date part 'DATE'"
SELECT DATEADD(DATE, 1, '2023-01-15'); -- Incorrect: 'DATE' is not a valid date part
SELECT DATEADD(DAY, 1, '2023-01-15');  -- Correct: use 'DAY' instead

-- Common error: Type mismatch
-- Error: "Numeric value 'abc' is not recognized"
SELECT DATEADD(DAY, 'abc', '2023-01-15'); -- Incorrect: second parameter must be numeric
SELECT DATEADD(DAY, 10, '2023-01-15');    -- Correct: use numeric value

-- Common error: Invalid date format
-- Error: "Date 'January 15, 2023' is not recognized"
SELECT DATEADD(DAY, 1, 'January 15, 2023'); -- Incorrect: unrecognized date format
SELECT DATEADD(DAY, 1, '2023-01-15');       -- Correct: use YYYY-MM-DD format

Tips optimasi kinerja

Untuk kinerja terbaik saat menggunakan DATEADD dalam operasi skala besar:

  1. Terapkan DATEADD pada tahap transformasi daripada penyaringan jika memungkinkan.
  2. Pra-hitung perhitungan tanggal yang umum dalam tabel sementara atau CTE saat digunakan berulang kali.
  3. Pertimbangkan menggunakan DATE_TRUNC sebelum DATEADD untuk perhitungan berbasis rentang guna meningkatkan penggunaan indeks.
  4. Untuk operasi batch seperti menghasilkan rentang tanggal, gunakan generator urutan (seperti pada contoh dimensi tanggal) daripada CTE rekursif.
-- Inefficient pattern (calculating same value repeatedly)
SELECT *
FROM large_table
WHERE DATEADD(MONTH, 1, event_date) < CURRENT_DATE();

-- More efficient approach (calculate once)
WITH calc_dates AS (
   SELECT *, DATEADD(MONTH, 1, event_date) AS next_month_date
   FROM large_table
)
SELECT *
FROM calc_dates
WHERE next_month_date < CURRENT_DATE();

Memahami kasus tepi dan teknik optimasi ini akan membantu Anda menulis logika manipulasi tanggal yang lebih andal di Snowflake, menghindari jebakan umum sekaligus memaksimalkan kinerja.

Kesimpulan

Fungsi Snowflake DATEADD adalah alat penting untuk manipulasi tanggal yang memungkinkan profesional data melakukan aritmetika waktu di berbagai date part. Fungsi ini menangani tanggal akhir bulan, tahun kabisat, zona waktu, dan transisi Daylight Saving Time dengan perilaku yang dapat diprediksi. Kita telah melihat bagaimana DATEADD dapat diterapkan untuk manajemen langganan, pelacakan pengiriman, pembuatan dimensi tanggal, dan perhitungan penagihan. Saat digunakan bersama DATEDIFF dan DATE_TRUNC, fungsi ini menjadi komponen inti untuk analitik berbasis waktu di Snowflake.

Untuk pengetahuan Snowflake lebih lanjut, lihat Snowflake Foundations atau jelajahi Creating Tables in Snowflake untuk membangun keterampilan pemodelan data Anda. Panduan Using Snowflake Time Travel melengkapi pemahaman Anda tentang operasi temporal. Pemula sebaiknya mulai dengan Snowflake Tutorial for Beginners.

Snowflake DATEADD FAQs

Untuk apa fungsi Snowflake DATEADD digunakan?

Fungsi Snowflake DATEADD digunakan untuk melakukan operasi aritmetika tanggal dengan menambah atau mengurangi interval waktu tertentu (seperti hari, bulan, atau tahun) dari nilai date, time, atau timestamp. Umumnya digunakan untuk menghitung tanggal di masa depan, perpanjangan langganan, dan analisis deret waktu.

Bagaimana DATEADD menangani tanggal akhir bulan dan tahun kabisat?

DATEADD secara cerdas menangani tanggal akhir bulan dengan mempertahankan konsep "akhir bulan". Saat menambahkan bulan ke tanggal akhir bulan, fungsi ini mengembalikan hari terakhir di bulan hasil. Untuk tahun kabisat, fungsi ini secara otomatis menyesuaikan tanggal (misalnya, menambahkan satu tahun ke 28 Februari 2023 menghasilkan 29 Februari 2024).

Apa saja date part yang didukung dalam DATEADD?

DATEADD mendukung berbagai date part termasuk YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND, NANOSECOND, dan CENTURY. Setiap date part memungkinkan Anda menambah atau mengurangkan unit waktu tersebut dari nilai tanggal.

Apakah DATEADD dapat digunakan dengan berbagai tipe timestamp?

Ya, DATEADD berfungsi dengan semua tipe timestamp Snowflake: TIMESTAMP_NTZ (Tanpa Zona Waktu), TIMESTAMP_TZ (Dengan Zona Waktu), dan TIMESTAMP_LTZ (Zona Waktu Lokal). Fungsi ini mempertahankan tipe timestamp dan menangani konversi zona waktu secara otomatis.

Apa perbedaan DATEADD dengan DATEDIFF dan DATE_TRUNC?

Sementara DATEADD memodifikasi tanggal dengan menambah atau mengurangkan interval waktu, DATEDIFF menghitung selisih antara dua tanggal dalam unit yang ditentukan, dan DATE_TRUNC menghapus presisi dari nilai tanggal/waktu dengan membulatkan ke bawah ke unit yang ditentukan. Ketiganya memiliki tujuan yang berbeda namun saling melengkapi dalam manipulasi tanggal.


Bexruz (Bex) Tuychiev's photo
Author
Bexruz (Bex) Tuychiev
LinkedIn

Saya adalah kreator konten data science dengan pengalaman lebih dari 2 tahun dan salah satu dengan jumlah pengikut terbesar di Medium. Saya suka menulis artikel mendalam tentang AI dan ML dengan sedikit gaya sarkastik—karena harus ada sesuatu untuk membuatnya tidak terlalu membosankan. Saya telah menghasilkan lebih dari 130 artikel dan satu kursus di DataCamp, dengan satu lagi sedang dalam proses. Konten saya telah dilihat oleh lebih dari 5 juta pasang mata, dan 20 ribu di antaranya menjadi pengikut di Medium dan LinkedIn. 

Topik
Snowflake
Cloud

Kursus Teratas di DataCamp

Program

Snowflake Foundations

7 jam
Coba langsung Snowflake! Pelajari cara mengakses, memodelkan, dan mengelola data dalam pengenalan interaktif ini untuk insinyur data, analis, dan profesional BI.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya