Ana içeriğe atla

Snowflake DATEADD: Uygulamalı Örneklerle Eksiksiz Kılavuz

Gerçek dünyadan örneklerle Snowflake'in DATEADD fonksiyonunu tarih manipülasyonunda nasıl kullanacağınızı öğrenin. Zaman hesaplamalarında ustalaşın, köşe durumlarını yönetin ve SQL sorgularınızın performansını optimize edin.
Güncel 3 Eki 2026  · 10 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Snowflake DATEADD fonksiyonu, tarih, saat veya zaman damgası değerlerine belirli zaman aralıkları ekleyip çıkarmanıza olanak tanıyan, her tür tarih aritmetiğini gerçekleştirmek için nispeten basit ama güçlü bir yöntemdir. 

 DATEADD kullanımını anlamak; abonelik dönemlerini hesaplama, gelecekteki herhangi bir tarih için projeksiyon oluşturma ve daha ileri analizler için zaman serisi veri kümeleri üretme gibi faydalı analizleri veri analistleri ve/veya mühendislerin gerçekleştirmesini sağlar. 

Bu eğitimde, fonksiyonun sözdizimini, pratikte nasıl uygulanabileceğini ve Snowflake SQL’de tarih işlemede DATEADD fonksiyonunun genel potansiyelini öğreneceksiniz.

Snowflake’e yeni başlıyorsanız, Snowflake Foundations yetkinlik yolumuzu mutlaka inceleyin. 

Uygulama İçin Örnek Bir Veritabanı Kurma

 DATEADD ayrıntılarına dalmadan önce, örnekleri daha pratik ve uygulamalı kılmak için tarih açısından zengin verilerle bir örnek veritabanı oluşturalım. Gerçek verilerle çalışmak, fonksiyonun yeteneklerini öğrenirken kavramların pekişmesine yardımcı olacaktır.

1. Snowflake hesabı oluşturma (yeni kullanıcılar için)

Snowflake’e yeniyseniz, 30 gün boyunca kredi sağlayan bir ücretsiz deneme hesabı oluşturmanız gerekir. Platforma kapsamlı bir giriş için, temelleri ve temel kavramları kapsayan Introduction to Snowflake kursuna göz atın.

2. Çalışma sayfanızı (worksheet) hazırlama

Snowflake’te SQL sorguları “Worksheet”lerde (not defterlerine benzer) çalıştırılır. Yeni bir worksheet oluşturmak için:

  1. Snowflake hesabınıza giriş yapın
  2. Ana menüden Worksheets bölümüne gidin
  3. Yeni bir worksheet oluşturmak için “+” düğmesine tıklayın
  4. Adını “DATEADD_Practice” olarak belirleyin

Snowflake arayüzüne tamamen yabancıysanız, bu Snowflake’e Yeni Başlayanlar için Eğitim platformun yararlı bir genel bakışını sunar.

3. Bir veritabanı ve şema seçme

Bu eğitimde, Snowflake Learning veritabanı ve public şemayı kullanacağız:

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

4. Sentetik veri ve tablolar oluşturma

‘DATEADD’ işlevini çeşitli senaryolarda göstermek için tarih ile ilgili veriler içeren üç tablo oluşturacağız:

Not: Aşağıdaki komutları worksheet'inizde tek seferde çalıştırmak için “Command + Shift + Enter”/”Ctrl + Shift + Enter” kullanın:

-- 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
);

Farklı tablo türleri ve en iyi uygulamalar dahil olmak üzere tablo oluşturma hakkında daha fazla ayrıntı için Creating Tables in Snowflake kılavuzuna bakın.

İpucu: Başarıyla çalıştıktan sonra worksheet'inizdeki mevcut tüm sorguları silmelisiniz.

5. Tabloları örnek verilerle doldurma

Çeşitli tarih ve saat değerleri içeren örnek veriler ekleyelim:

-- 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. Örnek verileri doğrulama

Verilerimizin doğru şekilde yüklendiğini doğrulamak için bazı temel sorgular çalıştıralım:

-- Check subscription data
SELECT * FROM subscriptions;

-- Check orders data
SELECT * FROM orders;

-- Check events data
SELECT * FROM events;

Artık farklı tarih ve zaman damgası biçimleri içeren üç tabloya sahip işlevsel bir örnek veritabanımız var. Bu veri kümesi, bu öğreticinin geri kalanında DATEADD fonksiyonunu keşfetmemiz için temel görevi görecek.

Snowflake DATEADD’i Anlama: Sözdizimi ve Parametreler

 DATEADD fonksiyonu, Snowflake’teki tarih aritmetiği işlemleri için gereklidir. Tarih, saat veya zaman damgası değerlerinden belirli zaman aralıklarını eklemenize veya çıkarmanıza olanak tanır. Bu fonksiyonun nasıl çalıştığını, sözdizimi ve parametrelerinden başlayarak adım adım ele alalım.

Fonksiyonun sözdizimi ve parametreleri

 DATEADD fonksiyonunun temel sözdizimi şöyledir:

DATEADD(date_part, value, date_or_timestamp_expression)

Her parametreyi inceleyelim:

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

Açıklama: Bu sorgu 15 Ocak 2023 tarihine 3 ay ekler. Parametreler şu şekilde çalışır:

  • date_part (MONTH): Eklediğimiz ya da çıkardığımız zaman birimini belirtir
  • value (3): Eklenecek (pozitif) veya çıkarılacak (negatif) birim sayısı
  • date_or_timestamp_expression ('2023-01-15'): Başlangıç tarihi

Çıktı:

THREE_MONTHS_LATER

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

2023-04-15

Desteklenen tarih parçaları

Snowflake, DATEADD ile kullanılabilecek çeşitli tarih parçalarını destekler:

-- 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;

Ek olarak desteklenen tarih parçaları arasında MILLISECOND, MICROSECOND, NANOSECOND ve CENTURY bulunur.

Artık yıllar ve ay sonu tarihlerinde Snowflake'in uygun ayarlamalar yaptığını unutmayın. Örneğin, 28 Şubat 2023’e bir yıl eklemek 29 Şubat 2024 (artık yıl) sonucunu verir.

Çıkarma için negatif değerleri kullanma

 DATEADD fonksiyonu, negatif değerler kullanılarak zaman aralıklarını çıkarmak için de kullanılabilir:

-- 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;

Açıklama:

  • İlk ifade 15 Mart 2023’ten 3 ay çıkarır
  • İkinci ifade bugünün tarihinden 7 gün çıkarır
  • Üçüncü ifade geçerli zaman damgasından 48 saat (2 gün) çıkarır

Çıktı:

THREE_MONTHS_AGO    ONE_WEEK_AGO    TWO_DAYS_AGO_TIME

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

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

Dönüş türü davranışı

 DATEADD'in dönüş türü, giriş ifadesinin türüne bağlıdır:

  • Bir DATE üzerinde uygulandığında bir DATE döndürür
  • Bir TIMESTAMP üzerinde uygulandığında bir TIMESTAMP döndürür
  • Bir TIME üzerinde uygulandığında bir TIME döndürür

DATEADD, girdiğinizin özgün veri türünü korur. Bu davranışı anlamak önemlidir; çünkü sonucu sonraki işlemlerde nasıl kullanabileceğinizi etkiler. 

Örneğin bir DATE değerine saat eklediğinizde, sonuç yine DATE olur (yani saat kısmı kırpılır); bir TIMESTAMP değerine saat eklemek ise tarih ve saat bileşenlerini korur.

 DATEADD fonksiyonunun bu temel parametre ve davranışlarını anlamak, sonraki bölümlerde inceleyeceğimiz daha gelişmiş kullanım senaryoları için temel sağlayacaktır.

Pratik DATEADD Örnekleri ve Kullanım Senaryoları

Artık DATEADD'in sözdizimini ve davranışını anladığımıza göre, örnek verilerimizi kullanarak pratik uygulamaları inceleyelim. Bu bölümde, DATEADD'in gerçek iş sorunlarını nasıl çözebileceğini ve veri analizi yeteneklerini nasıl güçlendirebileceğini göstereceğiz.

Abonelik yenileme tarihlerini hesaplama

Yaygın bir iş gereksinimi, faturalandırma döngüsüne göre aboneliklerin ne zaman yenileneceğini belirlemektir:

-- 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;

Açıklama: Bu sorgu, her aboneliğin faturalandırma döngüsüne göre ilk yenileme tarihini hesaplar. Faturalandırma döngüsüne bağlı olarak farklı tarih parçaları (MONTH veya YEAR) ve değerler (1, 3 veya 1) ile DATEADD kullanılır.

Çıktı:

dateadd fonksiyonunu kullanan bir snowflake sorgusunun sonucu

Snowflake'in 28 Şubat’tan 28 Şubat’a (artık yıl) geçişi doğru şekilde ele alışına dikkat edin.

Teslimat aralıklarını öngörme

Siparişler için tahmini teslimat aralıklarını hesaplamak üzere DATEADD kullanalım:

-- 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;

Açıklama: Bu sorgu:

  1. Tahmini teslimat saatinden 12 saat çıkararak 12 saatlik bir teslimat aralığı oluşturur
  2. Teslimat aralığının başlangıcını ve bitişini gösterir
  3. Tahmini toplam teslimat süresini saat cinsinden hesaplar

Çıktı:

dateadd fonksiyonunu kullanan bir snowflake sorgusunun sonucu

Bir tarih boyut tablosu oluşturma

Zaman serisi analizi sıklıkla bir tarih boyut tablosu gerektirir. Bunu DATEADD kullanarak oluşturalım:

-- 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;

Açıklama: Bu sorgu:

  1. DATEADD'i bir dizi üreticiyle birlikte kullanarak 2023 yılı için bir dizi tarih üretir
  2. Her takvim tarihi için yararlı tarih özniteliklerini çıkarır
  3. 2023 1. çeyreğe filtreler ve kısalık için ilk 10 günü gösterir

Çıktı:

dateadd fonksiyonunu kullanan bir snowflake sorgusunun sonucu

Tarih boyut tabloları, tarih özniteliklerini sorgularda tekrarla hesaplamak yerine önceden hesaplayarak analitik performansı önemli ölçüde artırır. Kuruluş genelinde tarih mantığını standartlaştırır, çeyrekler, hafta sonları ve diğer dönemler için tutarlı tanımlar sağlar. 

Bu yaklaşım hataları azaltır ve zaman temelli karmaşık analizleri iş kullanıcıları için daha erişilebilir kılar. Tarih boyutları, yıl, çeyrek, ay ve gün gibi çeşitli zaman hiyerarşilerine göre verimli filtreleme ve gruplamayı da mümkün kılar.

Sıra üretimi ile DATEADD fonksiyonu, bu boyut tablolarını elle veri girişi olmadan doldurmak için basit bir yöntem sunar. 

Bu teknik, çok yıllı takvimler veya mali takvimler ya da iş günü hesaplamaları gibi özel zaman boyutları oluşturmak için genişletilebilir. Ek sütunlar, doğru raporlama için kritik olan tatil bayrakları, hafta numaraları veya özel iş dönemi tanımlamaları içerebilir. 

Oluşturulduktan sonra bu boyut tablosu, panolar ve raporlarda güçlü zaman zekâsı yetenekleri sağlamak için olgu tablolarıyla birleştirilebilir.

Zamanlanmış olayları analiz etme

Yaklaşan planlı bakım etkinliklerini analiz etmek için DATEADD kullanalım:

-- 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;

Açıklama: Bu sorgu:

  1. Yaklaşan etkinlikleri (gelecekte olanları) bulur
  2. Hazırlığın ne zaman başlaması gerektiğini hesaplar (etkinlikten 3 gün önce)
  3. Süresine göre etkinliğin ne zaman biteceğini hesaplar
  4. Etkinliğin başlamasına kaç dakika kaldığını gösterir

Tüm örnek verilerimiz 2023’ten olduğu için, bu sorgu 2025’te tipik olarak sonuç göstermeyecektir; ancak zamanlanmış etkinliklerin nasıl analiz edileceğini kavramsal olarak gösterir.

Faturalandırma dönemlerini hesaplama

Abonelik tabanlı işletmelerde, kesin faturalandırma dönemlerini hesaplamak esastır:

-- 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;

Açıklama: Bu sorgu:

  1. Aylık abonelikler için bir dizi üreticiyle (seq4()) CROSS JOIN kullanarak sonraki 6 faturalandırma dönemini üretir
  2. Dönem numarasına göre ay ekleyerek DATEADD(MONTH, seq, start_date) ile başlangıç tarihini hesaplar
  3. Bitiş tarihini, bir sonraki dönemin başlamasından bir gün önce olacak şekilde DATEADD(DAY, -1, DATEADD(MONTH, seq + 1, start_date)) ile hesaplar Bu, değişen ay uzunluklarını (28/29/30/31 gün) doğru şekilde ele alır
  4. Her faturalandırma dönemindeki gün sayısını DATEDIFF('DAY', billing_period_start, billing_period_end) + 1 ile sayar +1 gereklidir çünkü DATEDIFF bitiş tarihini dahil etmeden tarihler arasındaki farkı döndürür
  5. WHERE koşulu ile yalnızca aylık abonelikleri dahil eder
  6. Sonuçları mantıklı bir sunum için subscription_id ve dönem numarasına göre sıralar

Çıktı:

dateadd fonksiyonunu kullanan bir snowflake sorgusunun sonucu

 DATEADD farklı ay uzunluklarını doğru biçimde ele alarak, faturalandırma dönemi hesaplamalarının isabetli olmasını sağlar.

Bu örnekler, tarih manipülasyonunu içeren yaygın iş problemlerini çözmek için DATEADD'in nasıl uygulanabileceğini gösterir. DATEADD'i diğer SQL fonksiyonlarıyla birleştirerek, Snowflake’te zaman temelli analiz ve veri işleme için güçlü sorgular oluşturabilirsiniz.

DATEADD’in İlgili Snowflake Fonksiyonlarıyla Karşılaştırılması

Şimdi DATEADD fonksiyonunun Snowflake’teki diğer bazı fonksiyonlarla nasıl karşılaştırıldığına bakalım. 

DATEADD ve DATEDIFF ile DATE_TRUNC

 DATEADD belirli bir zaman aralığını bir tarihe ekler veya çıkarırken, DATEDIFF iki tarih arasındaki farkı belirtilen birimde hesaplar. DATEDIFF, tarihler arasındaki tam birim sayısını temsil eden bir tamsayı döndürür ve abonelik süreleri veya sipariş verilişinden bu yana geçen günler gibi süreleri hesaplamak için idealdir. 

DATE_TRUNC ise, daha küçük tarih parçalarını varsayılan değerlerine ayarlayarak bir tarih/saat değerinden kesinliği kaldırır ve fiilen belirtilen birime yuvarlar.

-- 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;

Çıktı:

dateadd fonksiyonunu kullanan bir snowflake sorgusunun sonucu

Hangi fonksiyon ne zaman kullanılmalı (karar kriterleri)

Belirli zaman aralıklarıyla tarihleri ileri veya geri kaydırmanız gerektiğinde, örneğin gelecekteki yenileme tarihlerini, teslimat aralıklarını veya ödeme planlarını hesaplamak için DATEADD kullanın. 

Yaş, süre veya raporlama için zaman bazlı metrikler gibi, iki tarih arasında geçen zamanı ölçerken DATEDIFF tercih edin.

 DATE_TRUNC; verileri zaman dönemlerine göre (günlük, aylık, çeyreklik) gruplamanız, zaman damgalarını tutarlı bir kesinlik düzeyine standartlaştırmanız veya analiz için zaman temelli hiyerarşiler oluşturmanız gerektiğinde en uygunudur.

-- 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;

dateadd fonksiyonunu kullanan bir snowflake sorgusunun sonucu

Köşe Durumlarını Ele Alma ve Sorun Giderme

Fonksiyonu kullanırken sorun yaşıyorsanız, sizi sıkıntıdan kurtarabilecek bazı ipuçları burada. 

Ay sonu ve artık yıl ayarlamaları

Snowflake, DATEADD kullanıldığında ay sonu tarihlerini akıllıca ele alır. Ay sonu bir tarihe ay eklerken, Snowflake ortaya çıkan ayın gün sayısından bağımsız olarak o ayın son gününü döndürür. Bu davranış, ayların farklı uzunlukları olsa bile “ayın sonu” kavramını korur.

-- 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

Saat dilimi ve yaz saati uygulaması dikkate almaları

Saat dilimlerini içeren zaman damgası verileriyle (TIMESTAMP_TZ) çalışırken, DATEADD otomatik olarak yaz saati uygulaması (DST) geçişlerini hesaba katar. Bu, zaman değişiklikleri boyunca hesaplamaların doğru kalmasını sağlar, ancak bazen DST sınırlarında belirli aralıklar eklerken beklenmedik sonuçlar üretebilir.

-- 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

Zaman damgalarıyla DST geçişleri civarında çalışırken, 24 saat eklemenin 1 gün eklemeye eşit olmayabileceğini unutmayın. “add_1d" yaklaşımı, iş uygulamalarında genellikle daha sezgisel sonuçlar üretir.

Yaygın hatalar ve çözümleri

DATEADD hataları genellikle tür uyumsuzlukları veya geçersiz girdilerden kaynaklanır. İşte yaygın sorunlar ve çözümleri:

-- 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

Performans optimizasyonu ipuçları

Büyük ölçekli işlemlerde DATEADD kullanırken en iyi performans için:

  1. Mümkün olduğunda DATEADD'i filtreleme aşamalarından ziyade dönüşüm aşamalarında uygulayın.
  2. Birden çok kez kullanıldığında, yaygın tarih hesaplamalarını geçici tablolarda veya CTE’lerde önceden hesaplayın.
  3. Aralık tabanlı hesaplamalarda dizin kullanımını iyileştirmek için DATEADD'den önce DATE_TRUNC kullanmayı düşünün.
  4. Tarih aralıkları üretmek gibi toplu işlemler için, özyinelemeli CTE’ler yerine (tarih boyutu örneğinde gösterildiği gibi) sıra üreticilerini kullanın.
-- 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();

Bu köşe durumlarını ve optimizasyon tekniklerini anlamak, Snowflake’te daha sağlam tarih manipülasyon mantığı yazmanıza, yaygın tuzaklardan kaçınırken performansı en üst düzeye çıkarmanıza yardımcı olacaktır.

Sonuç

Snowflake DATEADD fonksiyonu, veri profesyonellerinin çeşitli tarih parçalarında zaman aritmetiği yapmasına olanak tanıyan, tarih manipülasyonu için temel bir araçtır. Ay sonu tarihlerini, artık yılları, saat dilimlerini ve Yaz Saati Uygulaması geçişlerini öngörülebilir bir davranışla ele alır. DATEADD'in abonelik yönetimi, teslimat takibi, tarih boyutu oluşturma ve faturalandırma hesaplamalarına nasıl uygulanabileceğini gördük. DATEDIFF ve DATE_TRUNC ile birlikte kullanıldığında, Snowflake’te zaman bazlı analitik için çekirdek bir bileşen haline gelir.

Daha fazla Snowflake bilgisi için Snowflake Foundations yetkinlik yoluna göz atın veya veri modelleme becerilerinizi geliştirmek için Creating Tables in Snowflake içeriğini keşfedin. Using Snowflake Time Travel rehberi, zamansal işlemlere dair anlayışınızı tamamlar. Yeni başlayanlar Snowflake Tutorial for Beginners ile başlamalıdır.

Snowflake DATEADD SSS

Snowflake DATEADD fonksiyonu ne için kullanılır?

Snowflake DATEADD fonksiyonu, tarih, saat veya zaman damgası değerlerine belirli zaman aralıkları (gün, ay, yıl gibi) ekleyip çıkarmak için kullanılır. Genellikle gelecekteki tarihleri, abonelik yenilemelerini ve zaman serisi analizlerini hesaplamak için tercih edilir.

DATEADD ay sonu tarihlerini ve artık yılları nasıl ele alır?

DATEADD, ay sonu tarihlerini “ayın sonu” kavramını koruyacak şekilde akıllıca ele alır. Ay sonu bir tarihe ay eklediğinizde, ortaya çıkan ayın son gününü döndürür. Artık yıllarda ise tarihleri otomatik olarak ayarlar (ör. 28 Şubat 2023’e bir yıl eklemek 29 Şubat 2024 sonucunu verir).

DATEADD'de desteklenen tarih parçaları nelerdir?

DATEADD, YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND, NANOSECOND, CENTURY dahil çeşitli tarih parçalarını destekler. Her bir parça, bir tarih değerine o birimin eklenip çıkarılmasına olanak tanır.

DATEADD farklı zaman damgası türleriyle kullanılabilir mi?

Evet, DATEADD tüm Snowflake zaman damgası türleriyle çalışır: TIMESTAMP_NTZ (Saat Dilimi Yok), TIMESTAMP_TZ (Saat Dilimli) ve TIMESTAMP_LTZ (Yerel Saat Dilimi). Zaman damgası türünü korur ve saat dilimi dönüşümlerini otomatik olarak ele alır.

DATEADD, DATEDIFF ve DATE_TRUNC'tan nasıl farklıdır?

 DATEADD zaman aralıkları ekleyip çıkartarak tarihleri değiştirirken, DATEDIFF iki tarih arasındaki farkı belirtilen birimde hesaplar ve DATE_TRUNC belirtilen birime yuvarlayarak bir tarih/saat değerinden kesinliği kaldırır. Tarih manipülasyonunda farklı ama birbirini tamamlayan amaçlara hizmet ederler.


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

2 yılı aşkın deneyime sahip bir veri bilimi içerik üreticisiyim ve Medium’da en büyük takipçi kitlelerinden birine sahibim. Yapay zekâ ve makine öğrenimi üzerine, biraz da alaycı bir üslupla yazılmış, ayrıntılı makaleler kaleme almayı seviyorum; çünkü onları biraz daha az sıkıcı hale getirmek için bir şeyler yapmak gerekiyor. 130’un üzerinde makale ve bir de DataCamp kursu ürettim; bir diğeri de hazırlık aşamasında. İçeriklerim 5 milyondan fazla kişi tarafından görüldü; bunların 20 bini Medium ve LinkedIn’de takipçim oldu. 

Konular
Snowflake
Cloud

Öne Çıkan DataCamp Kursları

Program

Kar Tanesi Temelleri

7 sa
Kar Tanesi ile uygulamalı eğitim alın! Veri mühendisleri, analistler ve iş zekası uzmanlarına yönelik bu interaktif girişte verileri sorgulamayı, modellemeyi ve yönetmeyi öğrenin.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Devamını GörDevamını Gör