Snowflake DATEADD: een complete gids met praktische voorbeelden
Leer hoe je de DATEADD-functie van Snowflake gebruikt voor datummanipulatie met voorbeelden uit de praktijk. Beheers tijdsberekeningen, behandel randgevallen en optimaliseer de performance in je SQL‑queries.
De Snowflake-functie DATEADD is een relatief eenvoudige maar krachtige manier om datumrekenkunde uit te voeren. Hiermee kunnen dataprofessionals een specifieke tijdsinterval optellen bij of aftrekken van een date-, time- of timestampwaarde.
Begrijpen hoe je DATEADD gebruikt, stelt data-analisten en -engineers in staat om nuttige analyses te doen, zoals het berekenen van abonnementsperioden, prognoses maken voor toekomstige data en zelfs tijdreeksdatasets genereren voor verdere analyse.
In deze tutorial leer je de syntaxis van de functie, hoe je die in de praktijk toepast en de algemene mogelijkheden van de DATEADD-functie binnen je toolkit voor datummanipulatie in Snowflake SQL.
Voordat we in de details van DATEADD duiken, maken we een voorbeelddatabase met datumrijke data zodat onze voorbeelden praktischer en hands-on zijn. Werken met echte data helpt de concepten te verankeren terwijl we de mogelijkheden van de functie leren kennen.
1. Een Snowflake-account aanmaken (voor nieuwe gebruikers)
Als je nieuw bent bij Snowflake, moet je een gratis proefaccount aanmaken dat 30 dagen tegoed biedt. Voor een uitgebreide introductie tot het platform, bekijk deze cursus Introduction to Snowflake, die de basis en fundamenten behandelt.
2. Je worksheet instellen
In Snowflake worden SQL-queries uitgevoerd in “Worksheets” (vergelijkbaar met notebooks). Zo maak je een nieuw worksheet:
Log in op je Snowflake-account
Navigeer vanuit het hoofdmenu naar Worksheets
Klik op de “+”-knop om een nieuw worksheet te maken
Geef het de naam “DATEADD_Practice”
Als je helemaal nieuw bent met de Snowflake-interface, biedt deze Snowflake Tutorial For Beginners een handige rondleiding door het platform.
3. Een database en schema kiezen
Voor deze tutorial gebruiken we de Snowflake Learning-database en het public-schema:
-- Create database and schemaUSEDATABASE SNOWFLAKE_LEARNING_DB;USESCHEMAPUBLIC;Mogelijk gemaakt door
4. Synthetische data en tabellen genereren
We maken drie tabellen met datumgerelateerde data om ‘DATEADD’ in verschillende scenario’s te demonstreren:
Let op: Gebruik “Command + Shift + Enter”/”Ctrl + Shift + Enter” om de volgende commando’s in je worksheet in één keer uit te voeren:
Laten we een paar basisqueries draaien om te controleren of onze data correct is geladen:
-- Check subscription dataSELECT*FROM subscriptions;-- Check orders dataSELECT*FROM orders;-- Check events dataSELECT*FROM events;Mogelijk gemaakt door
We hebben nu een functionele voorbeelddatabase met drie tabellen die verschillende date- en timestampformaten bevatten. Deze dataset vormt onze basis om de DATEADD-functie verderop in deze tutorial te verkennen.
Snowflake DATEADD begrijpen: syntaxis en parameters
De functie DATEADD is essentieel voor datumrekenkunde in Snowflake. Je kunt er specifieke tijdsintervallen mee optellen bij of aftrekken van date-, time- of timestampwaarden. Laten we bekijken hoe de functie werkt, te beginnen met de syntaxis en parameters.
Snowflake ondersteunt verschillende date parts die je met DATEADD kunt gebruiken:
-- Examples of different date partsSELECT
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;Mogelijk gemaakt door
Aanvullende ondersteunde date parts zijn onder andere MILLISECOND, MICROSECOND, NANOSECOND en CENTURY.
Let op dat Snowflake in schrikkeljaren en bij datumeinden van maanden passende aanpassingen doet. Zo resulteert één jaar optellen bij 28 februari 2023 in 29 februari 2024 (schrikkeljaar).
Negatieve waarden gebruiken voor aftrekken
De functie DATEADD kan ook tijdsintervallen aftrekken door negatieve waarden te gebruiken:
-- Subtracting time intervals with negative valuesSELECT
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;Mogelijk gemaakt door
Uitleg:
De eerste expressie trekt 3 maanden af van 15 maart 2023
De tweede expressie trekt 7 dagen af van de datum van vandaag
De derde expressie trekt 48 uur (2 dagen) af van de huidige timestamp
Output:
THREE_MONTHS_AGO ONE_WEEK_AGO TWO_DAYS_AGO_TIME
---------------- ------------ -----------------2025-02-102025-05-032025-05-0807:22:30.183-0700Mogelijk gemaakt door
Gedrag van het returntype
Het returntype van DATEADD hangt af van het type van de invoerexpressie:
Bij toepassing op een DATE geeft het een DATE terug
Bij toepassing op een TIMESTAMP geeft het een TIMESTAMP terug
Bij toepassing op een TIME geeft het een TIME terug
DATEADD behoudt het oorspronkelijke datatype van je invoer. Dit gedrag is belangrijk om te begrijpen, omdat het bepaalt hoe je het resultaat in volgende bewerkingen kunt gebruiken.
Als je bijvoorbeeld uren optelt bij een DATE-waarde, blijft het resultaat een DATE (de tijdcomponent wordt afgekapt), terwijl uren optellen bij een TIMESTAMP zowel datum- als tijdcomponent behoudt.
Inzicht in deze kernparameters en het gedrag van de DATEADD-functie vormt de basis voor de geavanceerdere use-cases die we in de volgende secties verkennen.
Praktische DATEADD-voorbeelden en use-cases
Nu we de syntaxis en het gedrag van DATEADD begrijpen, gaan we praktische toepassingen bekijken met onze voorbeelddata. In deze sectie laten we zien hoe DATEADD echte zakelijke problemen oplost en je analysemogelijkheden vergroot.
Abonnementsverlengingsdata berekenen
Een veelvoorkomende zakelijke eis is bepalen wanneer abonnementen verlengen op basis van hun factureringscyclus:
-- Calculate subscription renewal datesSELECT
subscription_id,
customer_id,
plan_name,
start_date,
billing_cycle,CASEWHEN 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)ENDAS first_renewal_date
FROM subscriptions;Mogelijk gemaakt door
Uitleg: Deze query berekent de eerste verlengingsdatum voor elk abonnement op basis van de factureringscyclus. We gebruiken DATEADD met verschillende date parts (MONTH of YEAR) en waarden (1, 3 of 1) afhankelijk van de cyclus.
Output:
Let op hoe Snowflake de overgang van 28 februari naar 28 februari (schrikkeljaar) correct afhandelt.
Bezorgvensters voorspellen
Laten we DATEADD gebruiken om geschatte bezorgvensters voor bestellingen te berekenen:
-- Calculate delivery windows based on order timestampsSELECT
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
ORDERBY order_id;Mogelijk gemaakt door
Uitleg: Deze query:
Maakt een bezorgvenster van 12 uur door 12 uur af te trekken van de geschatte bezorgtijd
Toont zowel het begin als het einde van het bezorgvenster
Bereken t de totale geschatte bezorgtijd in uren
Output:
Een datumdimensietabel maken
Voor tijdreeksanalyse is vaak een datumdimensietabel nodig. Laten we er een maken met DATEADD:
-- Generate a date dimension table for analysisWITH date_dimension AS(SELECT
DATEADD(DAY, seq4(),'2023-01-01')AS calendar_date
FROMTABLE(GENERATOR(ROWCOUNT=>365)))SELECT
calendar_date,YEAR(calendar_date)ASyear,MONTH(calendar_date)ASmonth,
MONTHNAME(calendar_date)AS month_name,DAY(calendar_date)ASday,
DAYOFWEEK(calendar_date)AS day_of_week,
DAYNAME(calendar_date)AS day_name,CASEWHEN DAYOFWEEK(calendar_date)IN(0,6)THENTRUEELSEFALSEENDAS is_weekend,
QUARTER(calendar_date)AS quarter
FROM date_dimension
WHERE calendar_date <='2023-03-31'ORDERBY calendar_date
LIMIT10;Mogelijk gemaakt door
Uitleg: Deze query:
Gebruikt DATEADD met een sequencegenerator om een reeks data voor 2023 te maken
Haalt handige datumkenmerken op voor elke kalenderdatum
Filtert naar Q1 2023 en toont de eerste 10 dagen voor de beknoptheid
Output:
Datumdimensietabellen verbeteren de performance van analyses aanzienlijk doordat datumkenmerken vooraf worden berekend in plaats van telkens in queries. Ze standaardiseren datumslogica binnen een organisatie en zorgen voor consistente definities van kwartalen, weekenden en andere perioden.
Deze aanpak vermindert fouten en maakt complexe tijdsgebonden analyses toegankelijker voor businessgebruikers. Datumdimensies maken ook efficiënt filteren en groeperen mogelijk op verschillende tijdshiërarchieën zoals jaar, kwartaal, maand en dag.
De DATEADD-functie in combinatie met sequencegeneratie biedt een eenvoudige methode om deze dimensietabellen te vullen zonder handmatige invoer.
Deze techniek kan worden uitgebreid om meerjarige kalenders of gespecialiseerde tijdsdimensies te maken, zoals fiscale kalenders of werkdagberekeningen. Extra kolommen kunnen feestdagvlaggen, weeknummers of aangepaste businessperioden bevatten die cruciaal zijn voor nauwkeurige rapportage.
Zodra deze dimensietabel is gemaakt, kan die met feittabellen worden gejoint om krachtige time intelligence-mogelijkheden in dashboards en rapporten te ondersteunen.
Geplande events analyseren
Laten we DATEADD gebruiken om aankomende geplande onderhoudsevents te analyseren:
-- Find upcoming events and calculate preparation timeSELECT
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()ORDERBY event_timestamp;Mogelijk gemaakt door
Uitleg: Deze query:
Vindt aankomende events (die in de toekomst liggen)
Bereken t wanneer de voorbereiding moet starten (3 dagen voor het event)
Berekent wanneer het event eindigt op basis van de duur
Toont hoeveel minuten resteren tot het event begint
Omdat al onze voorbeelddata uit 2023 komt, zal deze query in 2025 meestal geen resultaten tonen, maar conceptueel laat het zien hoe je geplande events analyseert.
Factureringsperioden berekenen
Voor abonnementsbedrijven is het essentieel om factureringsperioden precies te berekenen:
-- Generate next 6 billing periods for monthly subscriptionsWITH 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
CROSSJOIN(SELECT seq4()AS seq FROMTABLE(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)+1AS days_in_period
FROM billing_periods
ORDERBY subscription_id, billing_period_number;Mogelijk gemaakt door
Uitleg: Deze query:
Genereert de volgende 6 factureringsperioden voor maandabonnementen met een CROSS JOIN met een sequencegenerator (seq4())
Berekent de startdatum door maanden op te tellen op basis van het periodenummer met DATEADD(MONTH, seq, start_date)
Berekent de einddatum als één dag vóór de start van de volgende periode met DATEADD(DAY, -1, DATEADD(MONTH, seq + 1, start_date))Dit zorgt voor correcte afhandeling van verschillende maandlengtes (28/29/30/31 dagen)
Telt het aantal dagen in elke factureringsperiode met DATEDIFF('DAY', billing_period_start, billing_period_end) + 1De +1 is nodig omdat DATEDIFF het verschil tussen data geeft, exclusief de einddatum
Filtert met de WHERE-clausule alleen maandabonnementen
Sorteert resultaten op subscription_id en periode voor een logische weergave
Output:
Let op dat DATEADD verschillende maandlengtes correct afhandelt en zo nauwkeurige factureringsperioden waarborgt.
Deze voorbeelden laten zien hoe DATEADD kan worden toegepast om veelvoorkomende zakelijke problemen met datummanipulatie op te lossen. Door DATEADD te combineren met andere SQL-functies, maak je krachtige queries voor tijdgebaseerde analyses en dataverwerking in Snowflake.
DATEADD vergelijken met gerelateerde Snowflake-functies
Laten we nu bekijken hoe de DATEADD-functie zich verhoudt tot enkele andere Snowflake-functies.
DATEADD vs DATEDIFF en DATE_TRUNC
Waar DATEADD een specifiek tijdsinterval bij een datum optelt of eraf haalt, berekent DATEDIFF het verschil tussen twee data in een opgegeven eenheid. DATEDIFF retourneert een geheel getal dat het aantal volledige eenheden tussen data voorstelt, wat ideaal is voor het berekenen van duur, zoals abonnementslengtes of dagen sinds een bestelling.
DATE_TRUNC daarentegen verwijdert precisie uit een date/time-waarde door kleinere date parts op hun standaardwaarden te zetten, waardoor effectief naar een opgegeven eenheid wordt afgerond naar beneden.
-- Comparing the three functionsSELECT
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;Mogelijk gemaakt door
Output:
Wanneer gebruik je welke functie (keuzecriteria)
Gebruik DATEADD wanneer je data vooruit of achteruit moet verschuiven met specifieke tijdsintervallen, zoals het berekenen van toekomstige verlengingsdata, bezorgvensters of betaalschema’s.
Kies DATEDIFF wanneer je verstreken tijd tussen twee data wilt meten, zoals leeftijd, duur of tijdsgebonden metrics voor rapportage.
DATE_TRUNC is het meest geschikt wanneer je data wilt groeperen per periode (dagelijks, maandelijks, per kwartaal), timestamps wilt standaardiseren op een consistente nauwkeurigheid of tijdshiërarchieën wilt maken voor analyse.
-- Function usage by scenarioSELECT-- 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
LIMIT3;Mogelijk gemaakt door
Randgevallen afhandelen en troubleshooten
Loop je tegen problemen aan bij het gebruiken van de functie? Hier zijn enkele tips die je uit de brand kunnen helpen.
Maandeinde- en schrikkeljaaraanpassingen
Snowflake gaat slim om met datumeinden van maanden bij gebruik van DATEADD. Bij het optellen van maanden bij een datum aan het einde van de maand geeft Snowflake de laatste dag van de resulterende maand terug, ongeacht het aantal dagen. Dit gedrag bewaart het “einde-van-de-maand”-concept, zelfs wanneer maanden verschillende lengtes hebben.
-- Month-end handling examplesSELECT
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, 2024Mogelijk gemaakt door
Tijdzones en zomertijd
Bij het werken met timestamps die tijdzones bevatten (TIMESTAMP_TZ), DATEADD houdt automatisch rekening met overgangen van en naar zomertijd. Dit zorgt voor nauwkeurige berekeningen over tijdswisselingen heen, maar kan soms onverwachte resultaten opleveren wanneer je specifieke intervallen rond DST-grenzen optelt.
-- Time zone handling with DST transitionSELECT
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 transitionMogelijk gemaakt door
Rond timestamps bij DST-overgangen geldt: 24 uur optellen is niet altijd gelijk aan 1 dag optellen. De “add_1d"-aanpak levert in businesstoepassingen doorgaans intuitievere resultaten op.
Veelvoorkomende fouten en oplossingen
DATEADD-fouten komen meestal door typemismatches of ongeldige input. Hier zijn veelvoorkomende issues en oplossingen:
-- Common error: Invalid date part-- Error: "Invalid date part 'DATE'"SELECT DATEADD(DATE,1,'2023-01-15');-- Incorrect: 'DATE' is not a valid date partSELECT 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 numericSELECT 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 formatSELECT DATEADD(DAY,1,'2023-01-15');-- Correct: use YYYY-MM-DD formatMogelijk gemaakt door
Tips voor performance-optimalisatie
Voor de beste performance bij grootschalig gebruik van DATEADD:
Pas DATEADD liever toe in de transformatiefase dan in de filterfase wanneer mogelijk.
Voorberekenen van veelgebruikte datumberekeningen in tijdelijke tabellen of CTE’s wanneer ze meerdere keren worden gebruikt.
Overweeg DATE_TRUNC te gebruiken vóór DATEADD voor bereikgebaseerde berekeningen om indexgebruik te verbeteren.
Gebruik voor batchoperaties, zoals het genereren van datumreeksen, sequencegeneratoren (zoals in het datumdimensievoorbeeld) in plaats van recursieve CTE’s.
-- 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();Mogelijk gemaakt door
Inzicht in deze randgevallen en optimalisatietechnieken helpt je robuustere logica voor datummanipulatie in Snowflake te schrijven, veelvoorkomende valkuilen te vermijden en de performance te maximaliseren.
Conclusie
De Snowflake-functie DATEADD is een essentieel hulpmiddel voor datummanipulatie waarmee dataprofessionals tijdrekenkunde kunnen toepassen over verschillende date parts. De functie gaat voorspelbaar om met datumeinden van maanden, schrikkeljaren, tijdzones en overgangen van en naar zomertijd. We hebben gezien hoe DATEADD kan worden toegepast op abonnementsbeheer, bezorgtracking, het maken van datumdimensies en factureringsberekeningen. In combinatie met DATEDIFF en DATE_TRUNC wordt het een kerncomponent voor tijdgebaseerde analytics in Snowflake.
Waarvoor wordt de Snowflake DATEADD-functie gebruikt?⌄
De Snowflake-functie DATEADD wordt gebruikt om datumrekenkunde uit te voeren door specifieke tijdsintervallen (zoals dagen, maanden of jaren) op te tellen bij of af te trekken van date-, time- of timestampwaarden. Het wordt vaak gebruikt voor het berekenen van toekomstige data, abonnementsverlengingen en tijdreeksanalyse.
Hoe gaat DATEADD om met datumeinden van maanden en schrikkeljaren?⌄
DATEADD gaat slim om met datumeinden van maanden door het “einde van de maand”-concept te behouden. Als je maanden optelt bij een datum aan het einde van de maand, retourneert het de laatste dag van de resulterende maand. Voor schrikkeljaren past het data automatisch aan (bijv. één jaar optellen bij 28 februari 2023 resulteert in 29 februari 2024).
Welke date parts worden ondersteund in DATEADD?⌄
DATEADD ondersteunt diverse date parts, waaronder YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND, NANOSECOND en CENTURY. Met elk date part kun je die specifieke tijdseenheid optellen bij of aftrekken van een datumwaarde.
Kan DATEADD met verschillende timestamptypen worden gebruikt?⌄
Ja, DATEADD werkt met alle Snowflake-timestamptypen: TIMESTAMP_NTZ (geen tijdzone), TIMESTAMP_TZ (met tijdzone) en TIMESTAMP_LTZ (lokale tijdzone). Het behoudt het timestamptype en handelt tijdzoneconversies automatisch af.
Hoe verschilt DATEADD van DATEDIFF en DATE_TRUNC?⌄
Waar DATEADD data wijzigt door tijdsintervallen op te tellen of af te trekken, berekent DATEDIFF het verschil tussen twee data in een opgegeven eenheid en DATE_TRUNC verwijdert precisie door naar een opgegeven eenheid af te ronden. Ze dienen verschillende, maar complementaire doelen bij datummanipulatie.
Ik ben een contentmaker op het gebied van data science met meer dan 2 jaar ervaring en een van de grootste achterbannen op Medium. Ik schrijf graag uitgebreide artikelen over AI en ML met een vleugje sarcastische stijl, want je moet toch íets doen om ze wat minder saai te maken. Ik heb meer dan 130 artikelen en een DataCamp-cursus gemaakt, en er is nog een nieuwe in de maak. Mijn content is door meer dan 5 miljoen paar ogen gezien, van wie 20k volgers werden op zowel Medium als LinkedIn.
Ga aan de slag met Snowflake! Leer hoe je gegevens kunt opvragen, modelleren en beheren in deze interactieve introductie voor data-engineers, analisten en BI-professionals.
Leer ontwerpen, query's uitvoeren en bouwen in Snowflake - leer Snowflake SQL voor transformatie en modellering onder de knie te krijgen om een werkklare Data Engineer te worden.
De Snowflake-functie
DATEADDis een relatief eenvoudige maar krachtige manier om datumrekenkunde uit te voeren. Hiermee kunnen dataprofessionals een specifieke tijdsinterval optellen bij of aftrekken van een date-, time- of timestampwaarde.Begrijpen hoe je
DATEADDgebruikt, stelt data-analisten en -engineers in staat om nuttige analyses te doen, zoals het berekenen van abonnementsperioden, prognoses maken voor toekomstige data en zelfs tijdreeksdatasets genereren voor verdere analyse.In deze tutorial leer je de syntaxis van de functie, hoe je die in de praktijk toepast en de algemene mogelijkheden van de
DATEADD-functie binnen je toolkit voor datummanipulatie in Snowflake SQL.Ben je net begonnen met Snowflake? Bekijk dan zeker onze Snowflake Foundations skill track.
Een voorbeelddatabase opzetten om te oefenen
Voordat we in de details van
DATEADDduiken, maken we een voorbeelddatabase met datumrijke data zodat onze voorbeelden praktischer en hands-on zijn. Werken met echte data helpt de concepten te verankeren terwijl we de mogelijkheden van de functie leren kennen.1. Een Snowflake-account aanmaken (voor nieuwe gebruikers)
Als je nieuw bent bij Snowflake, moet je een gratis proefaccount aanmaken dat 30 dagen tegoed biedt. Voor een uitgebreide introductie tot het platform, bekijk deze cursus Introduction to Snowflake, die de basis en fundamenten behandelt.
2. Je worksheet instellen
In Snowflake worden SQL-queries uitgevoerd in “Worksheets” (vergelijkbaar met notebooks). Zo maak je een nieuw worksheet:
Als je helemaal nieuw bent met de Snowflake-interface, biedt deze Snowflake Tutorial For Beginners een handige rondleiding door het platform.
3. Een database en schema kiezen
Voor deze tutorial gebruiken we de Snowflake Learning-database en het public-schema:
4. Synthetische data en tabellen genereren
We maken drie tabellen met datumgerelateerde data om ‘DATEADD’ in verschillende scenario’s te demonstreren:
Let op: Gebruik “Command + Shift + Enter”/”Ctrl + Shift + Enter” om de volgende commando’s in je worksheet in één keer uit te voeren:
Voor meer details over het maken van tabellen, inclusief verschillende tafeltypes en best practices, zie Creating Tables in Snowflake.
Tip: Verwijder alle bestaande queries uit je worksheet nadat ze succesvol zijn uitgevoerd.
5. Tabellen vullen met voorbeelddata
We voegen voorbeelddata in met een reeks datum- en tijdwaarden:
6. Voorbeelddata valideren
Laten we een paar basisqueries draaien om te controleren of onze data correct is geladen:
We hebben nu een functionele voorbeelddatabase met drie tabellen die verschillende date- en timestampformaten bevatten. Deze dataset vormt onze basis om de
DATEADD-functie verderop in deze tutorial te verkennen.Snowflake DATEADD begrijpen: syntaxis en parameters
De functie
DATEADDis essentieel voor datumrekenkunde in Snowflake. Je kunt er specifieke tijdsintervallen mee optellen bij of aftrekken van date-, time- of timestampwaarden. Laten we bekijken hoe de functie werkt, te beginnen met de syntaxis en parameters.Functiesynthaxis en parameters
De basissynthaxis voor de functie
DATEADDis:Laten we elke parameter bekijken:
Uitleg: Deze query telt 3 maanden op bij 15 januari 2023. De parameters werken als volgt:
date_part (MONTH): Geeft de tijdseenheid aan die we optellen of aftrekkenvalue (3): Het aantal eenheden om op te tellen (positief) of af te trekken (negatief)date_or_timestamp_expression('2023-01-15'): De startdatum die je aanpastOutput:
Ondersteunde date parts
Snowflake ondersteunt verschillende date parts die je met
DATEADDkunt gebruiken:Aanvullende ondersteunde date parts zijn onder andere
MILLISECOND,MICROSECOND,NANOSECONDenCENTURY.Let op dat Snowflake in schrikkeljaren en bij datumeinden van maanden passende aanpassingen doet. Zo resulteert één jaar optellen bij 28 februari 2023 in 29 februari 2024 (schrikkeljaar).
Negatieve waarden gebruiken voor aftrekken
De functie
DATEADDkan ook tijdsintervallen aftrekken door negatieve waarden te gebruiken:Uitleg:
Output:
Gedrag van het returntype
Het returntype van
DATEADDhangt af van het type van de invoerexpressie:DATEgeeft het eenDATEterugTIMESTAMPgeeft het eenTIMESTAMPterugTIMEgeeft het eenTIMEterugDATEADDbehoudt het oorspronkelijke datatype van je invoer. Dit gedrag is belangrijk om te begrijpen, omdat het bepaalt hoe je het resultaat in volgende bewerkingen kunt gebruiken.Als je bijvoorbeeld uren optelt bij een DATE-waarde, blijft het resultaat een DATE (de tijdcomponent wordt afgekapt), terwijl uren optellen bij een
TIMESTAMPzowel datum- als tijdcomponent behoudt.Inzicht in deze kernparameters en het gedrag van de
DATEADD-functie vormt de basis voor de geavanceerdere use-cases die we in de volgende secties verkennen.Praktische DATEADD-voorbeelden en use-cases
Nu we de syntaxis en het gedrag van
DATEADDbegrijpen, gaan we praktische toepassingen bekijken met onze voorbeelddata. In deze sectie laten we zien hoeDATEADDechte zakelijke problemen oplost en je analysemogelijkheden vergroot.Abonnementsverlengingsdata berekenen
Een veelvoorkomende zakelijke eis is bepalen wanneer abonnementen verlengen op basis van hun factureringscyclus:
Uitleg: Deze query berekent de eerste verlengingsdatum voor elk abonnement op basis van de factureringscyclus. We gebruiken
DATEADDmet verschillende date parts (MONTHofYEAR) en waarden (1, 3 of 1) afhankelijk van de cyclus.Output:
Let op hoe Snowflake de overgang van 28 februari naar 28 februari (schrikkeljaar) correct afhandelt.
Bezorgvensters voorspellen
Laten we DATEADD gebruiken om geschatte bezorgvensters voor bestellingen te berekenen:
Uitleg: Deze query:
Output:
Een datumdimensietabel maken
Voor tijdreeksanalyse is vaak een datumdimensietabel nodig. Laten we er een maken met DATEADD:
Uitleg: Deze query:
DATEADDmet een sequencegenerator om een reeks data voor 2023 te makenOutput:
Datumdimensietabellen verbeteren de performance van analyses aanzienlijk doordat datumkenmerken vooraf worden berekend in plaats van telkens in queries. Ze standaardiseren datumslogica binnen een organisatie en zorgen voor consistente definities van kwartalen, weekenden en andere perioden.
Deze aanpak vermindert fouten en maakt complexe tijdsgebonden analyses toegankelijker voor businessgebruikers. Datumdimensies maken ook efficiënt filteren en groeperen mogelijk op verschillende tijdshiërarchieën zoals jaar, kwartaal, maand en dag.
De
DATEADD-functie in combinatie met sequencegeneratie biedt een eenvoudige methode om deze dimensietabellen te vullen zonder handmatige invoer.Deze techniek kan worden uitgebreid om meerjarige kalenders of gespecialiseerde tijdsdimensies te maken, zoals fiscale kalenders of werkdagberekeningen. Extra kolommen kunnen feestdagvlaggen, weeknummers of aangepaste businessperioden bevatten die cruciaal zijn voor nauwkeurige rapportage.
Zodra deze dimensietabel is gemaakt, kan die met feittabellen worden gejoint om krachtige time intelligence-mogelijkheden in dashboards en rapporten te ondersteunen.
Geplande events analyseren
Laten we
DATEADDgebruiken om aankomende geplande onderhoudsevents te analyseren:Uitleg: Deze query:
Omdat al onze voorbeelddata uit 2023 komt, zal deze query in 2025 meestal geen resultaten tonen, maar conceptueel laat het zien hoe je geplande events analyseert.
Factureringsperioden berekenen
Voor abonnementsbedrijven is het essentieel om factureringsperioden precies te berekenen:
Uitleg: Deze query:
seq4())DATEADD(MONTH, seq, start_date)DATEADD(DAY, -1, DATEADD(MONTH, seq + 1, start_date))Dit zorgt voor correcte afhandeling van verschillende maandlengtes (28/29/30/31 dagen)DATEDIFF('DAY', billing_period_start, billing_period_end) + 1De +1 is nodig omdat DATEDIFF het verschil tussen data geeft, exclusief de einddatumsubscription_iden periode voor een logische weergaveOutput:
Let op dat
DATEADDverschillende maandlengtes correct afhandelt en zo nauwkeurige factureringsperioden waarborgt.Deze voorbeelden laten zien hoe
DATEADDkan worden toegepast om veelvoorkomende zakelijke problemen met datummanipulatie op te lossen. DoorDATEADDte combineren met andere SQL-functies, maak je krachtige queries voor tijdgebaseerde analyses en dataverwerking in Snowflake.DATEADD vergelijken met gerelateerde Snowflake-functies
Laten we nu bekijken hoe de
DATEADD-functie zich verhoudt tot enkele andere Snowflake-functies.DATEADD vs DATEDIFF en DATE_TRUNC
Waar
DATEADDeen specifiek tijdsinterval bij een datum optelt of eraf haalt, berekentDATEDIFFhet verschil tussen twee data in een opgegeven eenheid.DATEDIFFretourneert een geheel getal dat het aantal volledige eenheden tussen data voorstelt, wat ideaal is voor het berekenen van duur, zoals abonnementslengtes of dagen sinds een bestelling.DATE_TRUNCdaarentegen verwijdert precisie uit een date/time-waarde door kleinere date parts op hun standaardwaarden te zetten, waardoor effectief naar een opgegeven eenheid wordt afgerond naar beneden.Output:
Wanneer gebruik je welke functie (keuzecriteria)
Gebruik
DATEADDwanneer je data vooruit of achteruit moet verschuiven met specifieke tijdsintervallen, zoals het berekenen van toekomstige verlengingsdata, bezorgvensters of betaalschema’s.Kies
DATEDIFFwanneer je verstreken tijd tussen twee data wilt meten, zoals leeftijd, duur of tijdsgebonden metrics voor rapportage.DATE_TRUNCis het meest geschikt wanneer je data wilt groeperen per periode (dagelijks, maandelijks, per kwartaal), timestamps wilt standaardiseren op een consistente nauwkeurigheid of tijdshiërarchieën wilt maken voor analyse.Randgevallen afhandelen en troubleshooten
Loop je tegen problemen aan bij het gebruiken van de functie? Hier zijn enkele tips die je uit de brand kunnen helpen.
Maandeinde- en schrikkeljaaraanpassingen
Snowflake gaat slim om met datumeinden van maanden bij gebruik van
DATEADD. Bij het optellen van maanden bij een datum aan het einde van de maand geeft Snowflake de laatste dag van de resulterende maand terug, ongeacht het aantal dagen. Dit gedrag bewaart het “einde-van-de-maand”-concept, zelfs wanneer maanden verschillende lengtes hebben.Tijdzones en zomertijd
Bij het werken met timestamps die tijdzones bevatten (
TIMESTAMP_TZ), DATEADD houdt automatisch rekening met overgangen van en naar zomertijd. Dit zorgt voor nauwkeurige berekeningen over tijdswisselingen heen, maar kan soms onverwachte resultaten opleveren wanneer je specifieke intervallen rond DST-grenzen optelt.Rond timestamps bij DST-overgangen geldt: 24 uur optellen is niet altijd gelijk aan 1 dag optellen. De “add_1d"-aanpak levert in businesstoepassingen doorgaans intuitievere resultaten op.
Veelvoorkomende fouten en oplossingen
DATEADD-fouten komen meestal door typemismatches of ongeldige input. Hier zijn veelvoorkomende issues en oplossingen:
Tips voor performance-optimalisatie
Voor de beste performance bij grootschalig gebruik van
DATEADD:DATEADDliever toe in de transformatiefase dan in de filterfase wanneer mogelijk.DATEADDvoor bereikgebaseerde berekeningen om indexgebruik te verbeteren.Inzicht in deze randgevallen en optimalisatietechnieken helpt je robuustere logica voor datummanipulatie in Snowflake te schrijven, veelvoorkomende valkuilen te vermijden en de performance te maximaliseren.
Conclusie
De Snowflake-functie
DATEADDis een essentieel hulpmiddel voor datummanipulatie waarmee dataprofessionals tijdrekenkunde kunnen toepassen over verschillende date parts. De functie gaat voorspelbaar om met datumeinden van maanden, schrikkeljaren, tijdzones en overgangen van en naar zomertijd. We hebben gezien hoeDATEADDkan worden toegepast op abonnementsbeheer, bezorgtracking, het maken van datumdimensies en factureringsberekeningen. In combinatie metDATEDIFFenDATE_TRUNCwordt het een kerncomponent voor tijdgebaseerde analytics in Snowflake.Voor meer Snowflake-kennis, bekijk de Snowflake Foundations skill track of verken Creating Tables in Snowflake om je datamodelleringsskills op te bouwen. De gids Using Snowflake Time Travel vult je begrip van temporele operaties aan. Beginners starten het best met de Snowflake Tutorial for Beginners.