Direkt zum Inhalt

Snowflake DATEADD: Ein kompletter Leitfaden mit praktischen Beispielen

Lerne anhand von praktischen Beispielen, wie du die DATEADD-Funktion von Snowflake zur Datumsmanipulation verwendest. Beherrsche Zeitberechnungen, behandle Grenzfälle und optimiere die Leistung in deinen SQL-Abfragen.
Aktualisierte 2. Juli 2025  · 10 Min. Lesezeit

Die Funktion Snowflake DATEADD ist eine relativ einfache, aber leistungsstarke Methode zur Durchführung von Datumsberechnungen, mit der Datenexperten ein bestimmtes Zeitintervall zu einem Datum, einer Uhrzeit oder einem Zeitstempel addieren oder subtrahieren können.

Wenn du weißt, wie du DATEADD nutzen kannst, können Datenanalysten und/oder Ingenieure nützliche Analysen durchführen, indem sie Abonnementzeiträume berechnen, Hochrechnungen für ein beliebiges zukünftiges Datum erstellen und sogar Zeitseriendatensätze für weitere Analysen erzeugen .

In diesem Lernprogramm lernst du die Syntax der Funktion kennen, wie sie in der Praxis angewendet werden kann und welches Potenzial die Funktion DATEADD in deinem Arsenal zur Datumsmanipulation in Snowflake SQL hat.

Wenn du gerade erst mit Snowflake anfängst, solltest du dir unbedingt unseren Lernpfad Snowflake Foundations ansehen. 

Einrichten einer Musterdatenbank für die Praxis

Bevor wir in die Details von DATEADD eintauchen, erstellen wir eine Beispieldatenbank mit datumsreichen Daten, um unsere Beispiele praktischer und praxisnaher zu gestalten. Die Arbeit mit realen Daten hilft dabei, die Konzepte zu festigen, während wir die Möglichkeiten der Funktion erlernen.

1. Erstellen eines Snowflake-Kontos (für neue Benutzer)

Wenn du neu bei Snowflake bist, musst du ein kostenloses Testkonto erstellen, das dir 30 Tage lang Guthaben bietet. Eine umfassende Einführung in die Plattform findest du in diesem Kurs Einführung in Snowflake, der die Grundlagen und das Basiswissen vermittelt.

2. Dein Arbeitsblatt einrichten

In Snowflake werden SQL-Abfragen in "Arbeitsblättern" ausgeführt (ähnlich wie in Notizbüchern). So erstellst du ein neues Arbeitsblatt:

  1. Logge dich in dein Snowflake-Konto ein
  2. Navigiere im Hauptmenü zu Arbeitsblättern
  3. Klicke auf die Schaltfläche "+", um ein neues Arbeitsblatt zu erstellen
  4. Nenne sie "DATEADD_Praxis"

Wenn du die Snowflake-Benutzeroberfläche noch nicht kennst, findest du in diesem Snowflake-Tutorial für Einsteiger einen hilfreichen Durchgang durch die Plattform.

3. Auswählen einer Datenbank und eines Schemas

Für diesen Lehrgang verwenden wir nur die Snowflake Learning-Datenbank und das öffentliche Schema:

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

4. Generierung von synthetischen Daten und Tabellen

Wir erstellen drei Tabellen mit datumsbezogenen Daten, um 'DATEADD' in verschiedenen Szenarien zu demonstrieren:

Hinweis: Verwende die Tastenkombination "Befehl + Umschalt + Eingabe"/"Strg + Umschalt + Eingabe", um die folgenden Befehle in deinem Arbeitsblatt auf einmal auszuführen:

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

Weitere Informationen zum Erstellen von Tabellen, einschließlich verschiedener Tabellentypen und bewährter Verfahren, findest du unter Tabellen in Snowflake erstellen.

Tipp: Du solltest alle bestehenden Abfragen aus deinem Arbeitsblatt löschen, nachdem sie erfolgreich ausgeführt wurden.

5. Tabellen mit Beispieldaten füllen

Lass uns Beispieldaten mit verschiedenen Datums- und Zeitwerten einfügen:

-- 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. Validierung der Stichprobendaten

Führen wir einige grundlegende Abfragen durch, um zu überprüfen, ob unsere Daten korrekt geladen wurden:

-- Check subscription data
SELECT * FROM subscriptions;

-- Check orders data
SELECT * FROM orders;

-- Check events data
SELECT * FROM events;

Jetzt haben wir eine funktionierende Beispieldatenbank mit drei Tabellen, die unterschiedliche Datums- und Zeitstempelformate enthalten. Dieser Datensatz dient als Grundlage für die Erkundung der Funktion DATEADD im weiteren Verlauf dieses Lehrgangs.

Snowflake DATEADD verstehen: Syntax und Parameter

Die Funktion DATEADD ist für die Datumsberechnungen in Snowflake unerlässlich. Sie ermöglicht es dir, bestimmte Zeitintervalle zu Datums-, Zeit- oder Zeitstempelwerten zu addieren oder zu subtrahieren. Schauen wir uns an, wie diese Funktion funktioniert, beginnend mit ihrer Syntax und ihren Parametern.

Funktionssyntax und Parameter

Die grundlegende Syntax für die Funktion DATEADD lautet:

DATEADD(date_part, value, date_or_timestamp_expression)

Schauen wir uns die einzelnen Parameter an:

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

Erläuterung: Diese Abfrage fügt 3 Monate bis zum 15. Januar 2023 hinzu. Die Parameter funktionieren wie folgt:

  • date_part (MONTH): Gibt die Zeiteinheit an, die addiert oder subtrahiert wird
  • value (3): Die Anzahl der zu addierenden (positiv) oder subtrahierenden (negativ) Einheiten
  • date_or_timestamp_expression ('2023-01-15'): Das zu ändernde Anfangsdatum

Ausgabe:

THREE_MONTHS_LATER

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

2023-04-15

Unterstützte Datumsteile

Snowflake unterstützt verschiedene Datumsteile, die mit DATEADD verwendet werden können:

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

Weitere unterstützte Datumsteile sind MILLISECOND, MICROSECOND, NANOSECOND und CENTURY.

Beachte, dass Snowflake in Schaltjahren und bei Monatsenddaten entsprechende Anpassungen vornimmt. Wenn du zum Beispiel ein Jahr zum 28. Februar 2023 hinzufügst, ergibt sich der 29. Februar 2024 (Schaltjahr).

Negative Werte für die Subtraktion verwenden

Die Funktion DATEADD kann auch Zeitintervalle subtrahieren, indem sie negative Werte verwendet:

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

Erläuterung:

  • Der erste Ausdruck subtrahiert 3 Monate vom 15. März 2023
  • Der zweite Ausdruck subtrahiert 7 Tage von dem heutigen Datum
  • Der dritte Ausdruck subtrahiert 48 Stunden (2 Tage) vom aktuellen Zeitstempel

Ausgabe:

THREE_MONTHS_AGO    ONE_WEEK_AGO    TWO_DAYS_AGO_TIME

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

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

Verhalten des Rückgabetyps

Die Rückgabeart von DATEADD hängt von der Art des Eingabeausdrucks ab:

  • Wenn sie auf DATE angewendet wird, gibt sie eine DATE
  • Wenn sie auf TIMESTAMP angewendet wird, gibt sie eine TIMESTAMP
  • Wenn sie auf TIME angewendet wird, gibt sie eine TIME

DATEADD behält den ursprünglichen Datentyp deiner Eingabe bei. Dieses Verhalten ist wichtig zu verstehen, weil es sich darauf auswirkt, wie du das Ergebnis in nachfolgenden Operationen verwenden kannst. 

Wenn du zum Beispiel Stunden zu einem DATE-Wert hinzufügst, ist das Ergebnis immer noch ein DATE (d.h. der Zeitanteil wird abgeschnitten), während beim Hinzufügen von Stunden zu einem TIMESTAMP sowohl die Datums- als auch die Zeitkomponente erhalten bleiben.

Das Verständnis dieser Kernparameter und des Verhaltens der Funktion DATEADD bildet die Grundlage für die fortgeschrittenen Anwendungsfälle, die wir in den folgenden Abschnitten untersuchen werden.

Praktische DATEADD-Beispiele und Anwendungsfälle

Nachdem wir nun die Syntax und das Verhalten von DATEADD verstanden haben, wollen wir praktische Anwendungen anhand unserer Beispieldaten untersuchen. In diesem Abschnitt zeigen wir, wie DATEADD echte Geschäftsprobleme lösen und die Möglichkeiten der Datenanalyse verbessern kann.

Berechnung der Abonnementverlängerungsdaten

Eine häufige Geschäftsanforderung ist die Bestimmung des Zeitpunkts, zu dem Abonnements auf der Grundlage ihres Abrechnungszyklus erneuert werden:

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

Erläuterung: Diese Abfrage berechnet das erste Verlängerungsdatum für jedes Abonnement auf der Grundlage seines Abrechnungszyklus. Wir verwenden DATEADD mit unterschiedlichen Datumsteilen (MONTH oder YEAR ) und Werten (1, 3 oder 1) je nach Abrechnungszyklus.

Ausgabe:

Das Ergebnis einer Snowflake-Abfrage, die die Funktion dateadd verwendet

Beachte, wie Snowflake den Übergang vom 28. Februar zum 28. Februar (Schaltjahr) korrekt behandelt.

Lieferfenster vorhersagen

Verwenden wir DATEADD, um die geschätzten Lieferfenster für Bestellungen zu berechnen:

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

Erläuterung: Diese Anfrage:

  1. Erzeugt ein 12-Stunden-Lieferfenster, indem er 12 Stunden von der geschätzten Lieferzeit abzieht
  2. Zeigt sowohl den Beginn als auch das Ende des Lieferfensters an
  3. Berechnet die geschätzte Gesamtlieferzeit in Stunden

Ausgabe:

Das Ergebnis einer Snowflake-Abfrage, die die Funktion dateadd verwendet

Erstellen einer Tabelle mit Datumsangaben

Für die Zeitreihenanalyse wird häufig eine Tabelle mit Datumsangaben benötigt. Lass uns eine mit DATEADD erstellen:

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

Erläuterung: Diese Anfrage:

  1. Verwendet DATEADD mit einem Sequenzgenerator, um eine Reihe von Daten für 2023 zu erstellen.
  2. Extrahiert nützliche Datumsattribute für jedes Kalenderdatum
  3. Filtert auf Q1 2023 und zeigt der Kürze halber die ersten 10 Tage

Ausgabe:

Das Ergebnis einer Snowflake-Abfrage, die die Funktion dateadd verwendet

Tabellen mit Datumsdimensionen verbessern die Analyseleistung erheblich, indem sie Datumsattribute im Voraus berechnen, anstatt sie in Abfragen wiederholt zu berechnen. Sie vereinheitlichen die Datumslogik im gesamten Unternehmen und sorgen für einheitliche Definitionen von Quartalen, Wochenenden und anderen Zeiträumen. 

Dieser Ansatz reduziert Fehler und macht komplexe zeitbasierte Analysen für Geschäftsanwender leichter zugänglich. Datumsdimensionen ermöglichen auch eine effiziente Filterung und Gruppierung nach verschiedenen Zeithierarchien wie Jahr, Quartal, Monat und Tag.

Die Funktion DATEADD mit Reihenfolgebildung bietet eine einfache Methode, diese Tabellen ohne manuelle Dateneingabe aufzufüllen.

Diese Technik kann erweitert werden, um mehrjährige Kalender oder spezielle Zeitdimensionen wie Steuerkalender oder Geschäftstagsberechnungen zu erstellen. Zusätzliche Spalten können Feiertage, Wochennummern oder benutzerdefinierte Bezeichnungen für Geschäftszeiträume enthalten, die für eine genaue Berichterstattung wichtig sind. 

Einmal erstellt, kann diese Dimensionstabelle mit Faktentabellen verknüpft werden, um leistungsstarke Time Intelligence-Funktionen in Dashboards und Berichten zu ermöglichen.

Analyse der geplanten Ereignisse

Verwenden wir DATEADD, um anstehende geplante Wartungsereignisse zu analysieren:

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

Erläuterung: Diese Anfrage:

  1. Findet kommende Ereignisse (die in der Zukunft liegen)
  2. Berechnet, wann die Vorbereitung beginnen sollte (3 Tage vor der Veranstaltung)
  3. Berechnet anhand der Dauer des Ereignisses, wann es enden wird
  4. Zeigt an, wie viele Minuten bis zum Beginn des Ereignisses verbleiben

Da alle unsere Beispieldaten aus dem Jahr 2023 stammen, würde diese Abfrage im Jahr 2025 normalerweise keine Ergebnisse liefern, aber das Konzept zeigt, wie man geplante Ereignisse analysieren kann.

Berechnung der Abrechnungszeiträume

Für abonnementbasierte Unternehmen ist es wichtig, die Abrechnungszeiträume genau zu berechnen:

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

Erläuterung: Diese Anfrage:

  1. Erzeugt die nächsten 6 Abrechnungszeiträume für monatliche Abonnements durch einen CROSS JOIN mit einem Sequenzgenerator (seq4() )
  2. Berechnet das Startdatum, indem es die Monate basierend auf der Periodennummer addiert, indem es DATEADD(MONTH, seq, start_date)
  3. Berechnet das Enddatum als einen Tag vor dem Beginn der nächsten Periode mit DATEADD(DAY, -1, DATEADD(MONTH, seq + 1, start_date)) . Dies gewährleistet den korrekten Umgang mit unterschiedlichen Monatslängen (28/29/30/31 Tage)
  4. Zählt die Anzahl der Tage in jedem Abrechnungszeitraum mit DATEDIFF('DAY', billing_period_start, billing_period_end) + 1 . Die +1 ist notwendig, weil DATEDIFF die Differenz zwischen den Daten zurückgibt, ohne das Enddatum.
  5. Filtern, um nur monatliche Abonnements mit der WHERE-Klausel einzuschließen
  6. Bestellte Ergebnisse nach subscription_id und Abrechnungszeitraum für eine logische Darstellung

Ausgabe:

Das Ergebnis einer Snowflake-Abfrage, die die Funktion dateadd verwendet

Beachte, wie DATEADD mit unterschiedlichen Monatslängen umgeht und so eine genaue Berechnung des Abrechnungszeitraums sicherstellt.

Diese Beispiele zeigen, wie DATEADD eingesetzt werden kann, um gängige Geschäftsprobleme zu lösen, bei denen Daten manipuliert werden. Indem du DATEADD mit anderen SQL-Funktionen kombinierst, kannst du in Snowflake leistungsstarke Abfragen für zeitbasierte Analysen und Datenverarbeitung erstellen.

Vergleich von DATEADD mit verwandten Snowflake-Funktionen

Schauen wir uns nun an, wie dieFunktion DATEADDim Vergleich zu einigen anderen Funktionen von Snowflake abschneidet.

DATEADD vs. DATEDIFF und DATE_TRUNC

Während DATEADD ein bestimmtes Zeitintervall zu einem Datum addiert oder subtrahiert, berechnet DATEDIFF die Differenz zwischen zwei Daten in einer bestimmten Einheit. DATEDIFF gibt eine ganze Zahl zurück, die die Anzahl der vollständigen Einheiten zwischen den Daten angibt und ist damit ideal für die Berechnung von Zeiträumen wie Abonnementlängen oder Tagen seit der Bestellung .

DATE_TRUNCentfernt dagegen die Genauigkeit eines Datums-/Zeitwerts, indem kleinere Datumsanteile auf ihre Standardwerte gesetzt werden und so auf eine bestimmte Einheit abgerundet wird.

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

Ausgabe:

Das Ergebnis einer Snowflake-Abfrage, die die Funktion dateadd verwendet

Wann ist welche Funktion zu verwenden (Entscheidungskriterien)

Verwende DATEADD, wenn du Daten um bestimmte Zeitintervalle nach vorne oder hinten verschieben musst, z. B. um zukünftige Verlängerungsdaten, Lieferfenster oder Zahlungspläne zu berechnen .

Wähle DATEDIFF, wenn du die verstrichene Zeit zwischen zwei Daten messen willst, z. B. bei der Berechnung von Alter, Dauer oder zeitbasierten Metriken für die Berichterstattung.

 DATE_TRUNC ist am besten geeignet, wenn du Daten nach Zeiträumen (täglich, monatlich, vierteljährlich) gruppieren, Zeitstempel auf ein einheitliches Genauigkeitsniveau standardisieren oder zeitbasierte Hierarchien für Analysen erstellen musst.

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

Das Ergebnis einer Snowflake-Abfrage, die die Funktion dateadd verwendet

Umgang mit Grenzfällen und Fehlerbehebung

Wenn du Probleme bei der Nutzung der Funktion hast, findest du hier einige Tipps, die dir aus der Patsche helfen können. 

Anpassungen am Monatsende und im Schaltjahr

Snowflake geht bei der Verwendung von DATEADD intelligent mit Monatsenddaten um. Wenn du Monate zu einem Monatsende addierst, gibt Snowflake den letzten Tag des resultierenden Monats zurück, unabhängig von der Anzahl der Tage. Dieses Verhalten bewahrt das Konzept des "Monatsendes", auch wenn die Monate unterschiedlich lang sind.

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

Berücksichtigung von Zeitzonen und Sommerzeit

Wenn du mit Zeitstempeldaten arbeitest, die Zeitzonen enthalten (TIMESTAMP_TZ ), berücksichtigtDATEADD automatisch die Sommerzeitumstellung. Dies stellt sicher, dass die Berechnungen über Zeitumstellungen hinweg genau bleiben, kann aber manchmal zu unerwarteten Ergebnissen führen, wenn bestimmte Intervalle um die Sommerzeitgrenzen herum hinzugefügt werden.

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

Wenn du mit Zeitstempeln rund um die Sommerzeit arbeitest, solltest du beachten, dass die Addition von 24 Stunden nicht unbedingt der Addition von einem Tag entspricht. Der Ansatz "add_1d" führt in der Regel zu intuitiveren Ergebnissen in Geschäftsanwendungen.

Häufige Fehler und ihre Lösungen

DATEADD-Fehler entstehen in der Regel durch Typüberschneidungen oder ungültige Eingaben. Hier sind häufige Probleme und Lösungen:

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

Tipps zur Leistungsoptimierung

Für die beste Leistung beim Einsatz von DATEADD in großen Betrieben:

  1. Wende DATEADD wenn möglich in den Umwandlungs- statt in den Filterstufen an.
  2. Berechne allgemeine Datumsberechnungen in temporären Tabellen oder CTEs vor, wenn sie mehrfach verwendet werden.
  3. Erwäge die Verwendung von DATE_TRUNC vor DATEADD für bereichsbasierte Berechnungen, um die Indexnutzung zu verbessern.
  4. Für Batch-Operationen wie das Erzeugen von Datumsbereichen solltest du eher Sequenzgeneratoren (wie im Beispiel der Datumsdimension) als rekursive CTEs verwenden.
-- 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();

Wenn du diese Grenzfälle und Optimierungstechniken verstehst, kannst du in Snowflake eine robustere Logik für die Datumsmanipulation schreiben, häufige Fallstricke vermeiden und die Leistung maximieren.

Fazit

Die Funktion Snowflake DATEADD ist ein unverzichtbares Werkzeug für die Datumsmanipulation, mit dem Datenexperten Zeitarithmetik für verschiedene Datumsanteile durchführen können. Es behandelt Monatsende, Schaltjahre, Zeitzonen und Sommerzeitumstellungen mit vorhersehbarem Verhalten. Wir haben gesehen, wie DATEADD für die Verwaltung von Abonnements, die Nachverfolgung von Lieferungen, die Erstellung von Datumsangaben und die Berechnung von Rechnungen eingesetzt werden kann. Zusammen mit DATEDIFF und DATE_TRUNC wird es zu einer zentralen Komponente für zeitbasierte Analysen in Snowflake.

Wenn du mehr über Snowflake wissen möchtest, schau dir den Lernpfad Snowflake Foundations an oder erkunde das Erstellen von Tabellen in Snowflake, um deine Datenmodellierungskenntnisse zu erweitern. Der Leitfaden Snowflake Zeitreisen nutzen ergänzt dein Verständnis für zeitliche Abläufe. Anfänger/innen sollten mit dem Snowflake Tutorial für Anfänger/innen beginnen.

Snowflake DATEADD FAQs

Wofür wird die Snowflake DATEADD-Funktion verwendet?

Mit der Funktion Snowflake DATEADD kannst du Datumsoperationen durchführen, indem du bestimmte Zeitintervalle (wie Tage, Monate oder Jahre) zu Datums-, Zeit- oder Zeitstempelwerten addierst oder subtrahierst. Sie wird häufig für die Berechnung zukünftiger Daten, Abonnementverlängerungen und Zeitreihenanalysen verwendet.

Wie geht DATEADD mit Monatsenddaten und Schaltjahren um?

DATEADD geht intelligent mit Monatsenddaten um, indem es das Konzept des "Monatsendes" beibehält. Wenn du Monate zu einem Monatsenddatum hinzufügst, wird der letzte Tag des resultierenden Monats zurückgegeben. Bei Schaltjahren werden die Daten automatisch entsprechend angepasst (wenn du z. B. dem 28. Februar 2023 ein Jahr hinzufügst, ergibt das den 29. Februar 2024).

Welche Datumsteile werden in DATEADD unterstützt?

DATEADD unterstützt verschiedene Datumsteile, darunter YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND, NANOSECOND, and CENTURY. Mit jedem Datumsteil kannst du eine bestimmte Zeiteinheit zu einem Datumswert addieren oder von ihm abziehen.

Kann DATEADD mit verschiedenen Zeitstempeltypen verwendet werden?

Ja, DATEADD funktioniert mit allen Snowflake Zeitstempeltypen: TIMESTAMP_NTZ (keine Zeitzone), TIMESTAMP_TZ (mit Zeitzone) und TIMESTAMP_LTZ (lokale Zeitzone). Der Zeitstempeltyp wird beibehalten und die Zeitzonenumrechnung erfolgt automatisch.

Wie unterscheidet sich DATEADD von DATEDIFF und DATE_TRUNC?

Während DATEADD Datumsangaben verändert, indem es Zeitintervalle addiert oder subtrahiert, berechnet DATEDIFF die Differenz zwischen zwei Datumsangaben in einer bestimmten Einheit, und DATE_TRUNC entfernt die Genauigkeit eines Datums-/Zeitwerts, indem es auf eine bestimmte Einheit abrundet. Sie dienen unterschiedlichen, aber sich ergänzenden Zwecken bei der Datumsmanipulation.


Bex Tuychiev's photo
Author
Bex Tuychiev
LinkedIn

Ich bin ein Data Science Content Creator mit über 2 Jahren Erfahrung und einem der größten Follower auf Medium. Ich schreibe gerne ausführliche Artikel über KI und ML mit einem etwas sarkastischen Stil, denn man muss etwas tun, damit sie nicht so langweilig sind. Ich habe mehr als 130 Artikel verfasst und einen DataCamp-Kurs gemacht, ein weiterer ist in Vorbereitung. Meine Inhalte wurden von über 5 Millionen Augenpaaren gesehen, von denen 20.000 zu Followern auf Medium und LinkedIn wurden. 

Themen

Top DataCamp Kurse

Lernpfad

Snowflake Foundations

0 Min.
Get hands-on with Snowflake! Learn to query, model, and manage data in this interactive intro for data engineers, analysts, and BI professionals.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Bist du gerade auf der Suche nach einem Job, der Snowflake nutzt? Bereite dich mit diesen 20 besten Snowflake-Interview-Fragen vor, damit du den Job bekommst!
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

15 Min.

Der Blog

Die 50 besten AWS-Interview-Fragen und Antworten für 2025

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interviewfragen, zusammen mit Fragen, die auf realen Situationen basieren.
Zoumana Keita 's photo

Zoumana Keita

15 Min.

Der Blog

Lehrer/innen und Schüler/innen erhalten das Premium DataCamp kostenlos für ihre gesamte akademische Laufbahn

Keine Hacks, keine Tricks. Schüler/innen und Lehrer/innen, lest weiter, um zu erfahren, wie ihr die Datenerziehung, die euch zusteht, kostenlos bekommen könnt.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

4 Min.

Der Blog

2022-2023 DataCamp Classrooms Jahresbericht

Zu Beginn des neuen Schuljahres ist DataCamp Classrooms motivierter denn je, das Lernen mit Daten zu demokratisieren. In den letzten 12 Monaten sind über 7.650 neue Klassenzimmer hinzugekommen.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 Min.

Der Blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates hat im zweiten Quartal 2023 über 20.000 Stipendien an unsere gemeinnützigen Partner vergeben. Erfahre, wie fleißige benachteiligte Lernende diese Chancen in lebensverändernde berufliche Erfolge verwandelt haben.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Der Blog

Top 30 Generative KI Interview Fragen und Antworten für 2024

Dieser Blog bietet eine umfassende Sammlung von Fragen und Antworten zu generativen KI-Interviews, die von grundlegenden Konzepten bis hin zu fortgeschrittenen Themen reichen.
Hesam Sheikh Hassani's photo

Hesam Sheikh Hassani

15 Min.

Mehr anzeigenMehr anzeigen