Lernpfad
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:
- Logge dich in dein Snowflake-Konto ein
- Navigiere im Hauptmenü zu Arbeitsblättern
- Klicke auf die Schaltfläche "+", um ein neues Arbeitsblatt zu erstellen
- 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 wirdvalue (3)
: Die Anzahl der zu addierenden (positiv) oder subtrahierenden (negativ) Einheitendate_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 eineDATE
- Wenn sie auf
TIMESTAMP
angewendet wird, gibt sie eineTIMESTAMP
- Wenn sie auf
TIME
angewendet wird, gibt sie eineTIME
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:
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:
- Erzeugt ein 12-Stunden-Lieferfenster, indem er 12 Stunden von der geschätzten Lieferzeit abzieht
- Zeigt sowohl den Beginn als auch das Ende des Lieferfensters an
- Berechnet die geschätzte Gesamtlieferzeit in Stunden
Ausgabe:
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:
- Verwendet
DATEADD
mit einem Sequenzgenerator, um eine Reihe von Daten für 2023 zu erstellen. - Extrahiert nützliche Datumsattribute für jedes Kalenderdatum
- Filtert auf Q1 2023 und zeigt der Kürze halber die ersten 10 Tage
Ausgabe:
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:
- Findet kommende Ereignisse (die in der Zukunft liegen)
- Berechnet, wann die Vorbereitung beginnen sollte (3 Tage vor der Veranstaltung)
- Berechnet anhand der Dauer des Ereignisses, wann es enden wird
- 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:
- Erzeugt die nächsten 6 Abrechnungszeiträume für monatliche Abonnements durch einen CROSS JOIN mit einem Sequenzgenerator (
seq4()
) - Berechnet das Startdatum, indem es die Monate basierend auf der Periodennummer addiert, indem es
DATEADD(MONTH, seq, start_date)
- 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) - 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. - Filtern, um nur monatliche Abonnements mit der WHERE-Klausel einzuschließen
- Bestellte Ergebnisse nach
subscription_id
und Abrechnungszeitraum für eine logische Darstellung
Ausgabe:
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 DATEADD
im 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_TRUNC
entfernt 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:
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;
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:
- Wende
DATEADD
wenn möglich in den Umwandlungs- statt in den Filterstufen an. - Berechne allgemeine Datumsberechnungen in temporären Tabellen oder CTEs vor, wenn sie mehrfach verwendet werden.
- Erwäge die Verwendung von DATE_TRUNC vor
DATEADD
für bereichsbasierte Berechnungen, um die Indexnutzung zu verbessern. - 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.

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.