Program
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:
- Snowflake hesabınıza giriş yapın
- Ana menüden Worksheets bölümüne gidin
- Yeni bir worksheet oluşturmak için “+” düğmesine tıklayın
- 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 belirtirvalue (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 birDATEdöndürür - Bir
TIMESTAMPüzerinde uygulandığında birTIMESTAMPdöndürür - Bir
TIMEüzerinde uygulandığında birTIMEdö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ı:

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:
- Tahmini teslimat saatinden 12 saat çıkararak 12 saatlik bir teslimat aralığı oluşturur
- Teslimat aralığının başlangıcını ve bitişini gösterir
- Tahmini toplam teslimat süresini saat cinsinden hesaplar
Çıktı:

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:
DATEADD'i bir dizi üreticiyle birlikte kullanarak 2023 yılı için bir dizi tarih üretir- Her takvim tarihi için yararlı tarih özniteliklerini çıkarır
- 2023 1. çeyreğe filtreler ve kısalık için ilk 10 günü gösterir
Çıktı:

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:
- Yaklaşan etkinlikleri (gelecekte olanları) bulur
- Hazırlığın ne zaman başlaması gerektiğini hesaplar (etkinlikten 3 gün önce)
- Süresine göre etkinliğin ne zaman biteceğini hesaplar
- 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:
- Aylık abonelikler için bir dizi üreticiyle (
seq4()) CROSS JOIN kullanarak sonraki 6 faturalandırma dönemini üretir - Dönem numarasına göre ay ekleyerek
DATEADD(MONTH, seq, start_date)ile başlangıç tarihini hesaplar - 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 - Her faturalandırma dönemindeki gün sayısını
DATEDIFF('DAY', billing_period_start, billing_period_end) + 1ile sayar +1 gereklidir çünkü DATEDIFF bitiş tarihini dahil etmeden tarihler arasındaki farkı döndürür - WHERE koşulu ile yalnızca aylık abonelikleri dahil eder
- Sonuçları mantıklı bir sunum için
subscription_idve dönem numarasına göre sıralar
Çıktı:

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

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;

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:
- Mümkün olduğunda
DATEADD'i filtreleme aşamalarından ziyade dönüşüm aşamalarında uygulayın. - Birden çok kez kullanıldığında, yaygın tarih hesaplamalarını geçici tablolarda veya CTE’lerde önceden hesaplayın.
- Aralık tabanlı hesaplamalarda dizin kullanımını iyileştirmek için
DATEADD'den önce DATE_TRUNC kullanmayı düşünün. - 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.
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.

