Cursus
La fonction Snowflake DATEADD
est une méthode relativement simple mais puissante pour effectuer tout type d'arithmétique de date, qui permet aux professionnels des données d'ajouter ou de soustraire l'intervalle de temps spécifique d'une date, d'une heure ou d'une valeur d'horodatage.
Comprendre comment utiliser DATEADD
permettra aux analystes de données et/ou aux ingénieurs de mener des analyses utiles en calculant des périodes d'abonnement, en établissant des projections pour n'importe quelle date future et même en générant des ensembles de données de séries temporelles pour une analyse plus poussée .
Dans ce tutoriel, vous apprendrez la syntaxe de la fonction, comment elle peut être appliquée en pratique, et le potentiel global de la fonction DATEADD
dans votre arsenal de manipulation de dates dans Snowflake SQL.
Si vous débutez dans l'utilisation de Snowflake, n'hésitez pas à consulter notre cursus de compétences sur les fondements de Snowflake.
Mise en place d'une base de données d'échantillons pour la pratique
Avant de nous plonger dans les détails de DATEADD
, créons une base de données d'exemple avec des données riches en dates pour rendre nos exemples plus pratiques et concrets. Travailler avec des données réelles permet de renforcer les concepts au fur et à mesure que nous apprenons les capacités de la fonction.
1. Création d'un compte Snowflake (pour les nouveaux utilisateurs)
Si vous ne connaissez pas encore Snowflake, vous devez créer un compte d'essai gratuit qui vous donne droit à des crédits pendant 30 jours. Pour une introduction complète à la plateforme, consultez ce cours Introduction à Snowflake, qui couvre les bases et les fondamentaux.
2. Mise en place de votre feuille de calcul
Dans Snowflake, les requêtes SQL sont exécutées dans des "feuilles de travail" (similaires à des carnets de notes). Pour créer une nouvelle feuille de calcul :
- Connectez-vous à votre compte Snowflake
- Naviguez vers Feuilles de travail à partir du menu principal
- Cliquez sur le bouton "+" pour créer une nouvelle feuille de calcul.
- Nommez-le "DATEADD_Practice"
Si vous ne connaissez pas du tout l'interface de Snowflake, ce tutoriel pour débutants vous permettra de découvrir la plateforme.
3. Choix d'une base de données et d'un schéma
Pour ce tutoriel, nous utiliserons simplement la base de données et le schéma public de Snowflake Learning :
-- Create database and schema
USE DATABASE SNOWFLAKE_LEARNING_DB;
USE SCHEMA PUBLIC;
4. Générer des données et des tableaux synthétiques
Nous allons créer trois tableaux contenant des données relatives aux dates afin de démontrer l'utilité de "DATEADD" dans divers scénarios :
Note: Utilisez les touches "Commande + Maj + Entrée"/"Ctrl + Maj + Entrée" pour exécuter les commandes suivantes en une seule fois dans votre feuille de calcul :
-- 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
);
Pour plus de détails sur la création de tableaux, y compris les différents types de tableaux et les meilleures pratiques, reportez-vous à la section Création de tableaux dans Snowflake.
Indice: Vous devez supprimer toutes les requêtes existantes de votre feuille de calcul une fois qu'elles ont été exécutées avec succès.
5. Remplir les tableaux avec des données d'échantillonnage
Insérons un échantillon de données contenant diverses valeurs de date et d'heure :
-- 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. Validation des données de l'échantillon
Exécutons quelques requêtes de base pour vérifier que nos données sont correctement chargées :
-- Check subscription data
SELECT * FROM subscriptions;
-- Check orders data
SELECT * FROM orders;
-- Check events data
SELECT * FROM events;
Nous disposons à présent d'un exemple de base de données fonctionnel comprenant trois tableaux contenant différents formats de date et d'horodatage. Cet ensemble de données nous servira de base pour explorer la fonction DATEADD
dans le reste de ce tutoriel.
Comprendre le DATEADD de Snowflake : Syntaxe et paramètres
La fonction DATEADD
est essentielle pour les opérations arithmétiques sur les dates dans Snowflake. Il vous permet d'ajouter ou de soustraire des intervalles de temps spécifiques à des valeurs de date, d'heure ou d'horodatage. Détaillons le fonctionnement de cette fonction, en commençant par sa syntaxe et ses paramètres.
Syntaxe et paramètres des fonctions
La syntaxe de base de la fonction DATEADD
est la suivante :
DATEADD(date_part, value, date_or_timestamp_expression)
Examinons chaque paramètre :
-- Basic DATEADD example
SELECT
DATEADD(MONTH, 3, '2023-01-15') AS three_months_later;
Explication: Cette requête ajoute 3 mois au 15 janvier 2023. Les paramètres fonctionnent comme suit :
date_part (MONTH)
: Spécifie l'unité de temps que l'on ajoute ou que l'on soustrait.value (3)
: Le nombre d'unités à ajouter (positif) ou à soustraire (négatif)date_or_timestamp_expression
('2023-01-15') : La date de début de la modification
Sortie :
THREE_MONTHS_LATER
-----------------
2023-04-15
Parties de la date prises en charge
Snowflake prend en charge différentes parties de date qui peuvent être utilisées avec DATEADD
:
-- 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;
Les autres parties de date prises en charge sont MILLISECOND
, MICROSECOND
, NANOSECOND
et CENTURY
.
Notez que dans les années bissextiles et pour les dates de fin de mois, Snowflake procède aux ajustements nécessaires. Par exemple, en ajoutant une année au 28 février 2023, on obtient le 29 février 2024 (année bissextile).
Utiliser des valeurs négatives pour la soustraction
La fonction DATEADD
peut également soustraire des intervalles de temps en utilisant des valeurs négatives :
-- 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;
Explication:
- La première expression soustrait 3 mois au 15 mars 2023
- La deuxième expression soustrait 7 jours à la date d'aujourd'hui
- La troisième expression soustrait 48 heures (2 jours) à l'horodatage actuel
Sortie:
THREE_MONTHS_AGO ONE_WEEK_AGO TWO_DAYS_AGO_TIME
---------------- ------------ -----------------
2025-02-10 2025-05-03 2025-05-08 07:22:30.183 -0700
Comportement du type de retour
Le type de retour de DATEADD
dépend du type d'expression d'entrée :
- Lorsqu'elle est appliquée à un
DATE
, elle renvoie unDATE
- Lorsqu'elle est appliquée à un
TIMESTAMP
, elle renvoie unTIMESTAMP
- Lorsqu'elle est appliquée à un
TIME
, elle renvoie unTIME
DATEADD
préserve le type de données original de votre entrée. Il est important de comprendre ce comportement car il affecte la façon dont vous pouvez utiliser le résultat dans les opérations suivantes.
Par exemple, si vous ajoutez des heures à une valeur DATE, le résultat sera toujours une DATE (ce qui signifie que la partie temporelle est tronquée), alors que si vous ajoutez des heures à une valeur TIMESTAMP
, vous conserverez à la fois la date et l'heure.
La compréhension de ces paramètres et comportements fondamentaux de la fonction DATEADD
servira de base aux cas d'utilisation plus avancés que nous explorerons dans les sections suivantes.
Exemples pratiques de DATEADD et cas d'utilisation
Maintenant que nous avons compris la syntaxe et le comportement de DATEADD
, explorons les applications pratiques à l'aide de notre échantillon de données. Dans cette section, nous allons montrer comment DATEADD
peut résoudre des problèmes commerciaux réels et améliorer les capacités d'analyse des données.
Calcul des dates de renouvellement des abonnements
L'un des besoins courants des entreprises est de déterminer quand les abonnements seront renouvelés en fonction de leur cycle de facturation :
-- 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;
Explication : Cette requête calcule la première date de renouvellement de chaque abonnement en fonction de son cycle de facturation. Nous utilisons DATEADD
avec des parties de date (MONTH
ou YEAR
) et des valeurs (1, 3 ou 1) différentes selon le cycle de facturation.
Sortie :
Remarquez comment Snowflake gère correctement la transition du 28 février au 28 février (année bissextile).
Prévision des fenêtres de livraison
Utilisons DATEADD pour calculer les délais de livraison estimés pour les commandes :
-- 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;
Explication: Cette requête :
- Crée une fenêtre de livraison de 12 heures en soustrayant 12 heures au délai de livraison estimé.
- Indique le début et la fin de la fenêtre de livraison
- Calcule le délai de livraison total estimé en heures
Sortie:
Création d'un tableau de dimensionnement des dates
L'analyse des séries chronologiques nécessite souvent un tableau de dimensionnement des dates. Créons-en un à l'aide de DATEADD :
-- 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;
Explication: Cette requête :
- Utilise
DATEADD
avec un générateur de séquences pour créer une série de dates pour 2023. - Extrait les attributs de date utiles pour chaque date du calendrier
- Filtre sur le premier trimestre 2023 et affiche les 10 premiers jours par souci de concision.
Sortie :
Les tableaux de dimensionnement des dates améliorent considérablement les performances analytiques en pré-calculant les attributs de date plutôt qu'en les calculant de manière répétée dans les requêtes. Ils normalisent la logique des dates dans l'ensemble de l'organisation, en garantissant des définitions cohérentes des trimestres, des week-ends et d'autres périodes.
Cette approche réduit les erreurs et rend les analyses temporelles complexes plus accessibles aux utilisateurs. Les dimensions de la date permettent également de filtrer et de regrouper efficacement les données selon diverses hiérarchies temporelles telles que l'année, le trimestre, le mois et le jour.
La fonction DATEADD
avec génération de séquences offre une méthode simple pour remplir ces tableaux de dimensions sans saisie manuelle des données.
Cette technique peut être étendue pour créer des calendriers pluriannuels ou des dimensions temporelles spécialisées telles que les calendriers fiscaux ou les calculs de jours ouvrables. Des colonnes supplémentaires peuvent inclure des drapeaux de jours fériés, des numéros de semaine ou des désignations personnalisées de périodes d'activité, qui sont essentielles pour l'établissement de rapports précis.
Une fois créée, cette table de dimension peut être associée à des tableaux de faits pour offrir de puissantes fonctionnalités de veille temporelle dans les tableaux de bord et les rapports.
Analyse des événements programmés
Utilisons DATEADD
pour analyser les événements de maintenance programmés à venir :
-- 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;
Explication: Cette requête :
- Recherche d'événements à venir (ceux qui se dérouleront dans le futur)
- Calcule le moment où les préparatifs doivent commencer (3 jours avant l'événement)
- Calcule la date de fin de l'événement en fonction de sa durée.
- Indique le nombre de minutes restantes avant le début de l'événement.
Étant donné que toutes les données de notre échantillon datent de 2023, cette requête n'afficherait généralement aucun résultat en 2025, mais elle démontre de manière conceptuelle comment analyser les événements programmés.
Calcul des périodes de facturation
Pour les entreprises basées sur l'abonnement, il est essentiel de calculer des périodes de facturation précises :
-- 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;
Explication: Cette requête :
- Génère les 6 prochaines périodes de facturation pour les abonnements mensuels en utilisant un CROSS JOIN avec un générateur de séquence (
seq4()
) - Calcule la date de début en ajoutant des mois sur la base du numéro de la période à l'aide de
DATEADD(MONTH, seq, start_date)
- Calcule la date de fin comme un jour avant le début de la période suivante avec
DATEADD(DAY, -1, DATEADD(MONTH, seq + 1, start_date))
Cela permet de traiter correctement les longueurs de mois variables (28/29/30/31 jours). - Compte le nombre de jours de chaque période de facturation en utilisant
DATEDIFF('DAY', billing_period_start, billing_period_end) + 1
Le +1 est nécessaire car DATEDIFF renvoie la différence entre les dates, à l'exclusion de la date de fin. - Filtre pour inclure uniquement les abonnements mensuels avec la clause WHERE
- Ordonne les résultats par
subscription_id
et par période de facturation pour une présentation logique
Sortie:
Remarquez comment DATEADD
gère correctement les différentes durées de mois, garantissant ainsi un calcul précis de la période de facturation.
Ces exemples montrent comment DATEADD
peut être utilisé pour résoudre des problèmes commerciaux courants impliquant la manipulation de dates. En combinant DATEADD
avec d'autres fonctions SQL, vous pouvez créer des requêtes puissantes pour l'analyse temporelle et le traitement des données dans Snowflake.
Comparaison de DATEADD avec des fonctions Snowflake apparentées
Voyons maintenant comment lafonction DATEADD
se compare à d'autres fonctions de Snowflake .
DATEADD vs DATEDIFF et DATE_TRUNC
Alors que DATEADD
ajoute ou soustrait un intervalle de temps spécifique à une date, DATEDIFF
calcule la différence entre deux dates dans une unité spécifiée. DATEDIFF
renvoie un nombre entier représentant le nombre d'unités complètes entre les dates, ce qui en fait un outil idéal pour calculer des durées telles que la durée d'un abonnement ou le nombre de jours écoulés depuis la passation d'une commande .
DATE_TRUNC
en revanche, supprime la précision d'une valeur de date ou d'heure en fixant les plus petites parties de la date à leurs valeurs par défaut, ce qui revient à arrondir à l'unité spécifiée.
-- 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;
Sortie:
Quand utiliser chaque fonction (critères de décision)
Utilisez DATEADD
lorsque vous devez avancer ou reculer des dates à des intervalles de temps spécifiques, par exemple pour calculer les futures dates de renouvellement, les fenêtres de livraison ou les calendriers de paiement.
Choisissez DATEDIFF
lorsque vous mesurez le temps écoulé entre deux dates, par exemple pour calculer l'âge, la durée ou des mesures basées sur le temps pour l'établissement de rapports.
DATE_TRUNC
est le plus approprié lorsque vous devez regrouper des données par période (quotidienne, mensuelle, trimestrielle), normaliser les horodatages à un niveau de précision cohérent ou créer des hiérarchies temporelles à des fins d'analyse.
-- 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;
Traitement des cas particuliers et dépannage
Si vous rencontrez des problèmes lors de l'utilisation de la fonction, voici quelques conseils qui peuvent vous aider à vous en sortir.
Ajustements de fin de mois et d'année bissextile
Snowflake gère intelligemment les dates de fin de mois lorsque vous utilisez DATEADD
. Lorsque vous ajoutez des mois à une date de fin de mois, Snowflake renvoie le dernier jour du mois résultant, quel que soit le nombre de jours. Ce comportement préserve le concept de "fin de mois" même lorsque les mois ont des durées différentes.
-- 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
Considérations relatives au fuseau horaire et à l'heure d'été
Lorsque vous travaillez avec des données d'horodatage qui incluent des fuseaux horaires (TIMESTAMP_TZ
), DATEADD prend automatiquement en compte les transitions de l'heure d'été. Cela permet de garantir la précision des calculs lors des changements d'heure, mais peut parfois produire des résultats inattendus lors de l'ajout d'intervalles spécifiques autour des limites de l'heure d'été.
-- 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
Lorsque vous travaillez avec des horodatages lors des passages à l'heure d'été, sachez que l'ajout de 24 heures n'équivaut pas nécessairement à l'ajout d'un jour. L'approche "add_1d" produit généralement des résultats plus intuitifs dans les applications professionnelles.
Les erreurs courantes et leurs solutions
Les erreurs DATEADD sont généralement dues à des erreurs de type ou à des entrées non valides. Voici les problèmes les plus courants et leurs solutions :
-- 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
Conseils pour l'optimisation des performances
Pour des performances optimales lors de l'utilisation de DATEADD
dans le cadre d'opérations à grande échelle :
- Appliquez le site
DATEADD
en le transformant plutôt qu'en le filtrant lorsque c'est possible. - Précalculer les calculs de date courants dans des tableaux temporaires ou des ETC en cas d'utilisation multiple.
- Envisagez d'utiliser DATE_TRUNC avant
DATEADD
pour les calculs basés sur l'intervalle afin d'améliorer l'utilisation de l'index. - Pour les opérations par lots telles que la génération de plages de dates, utilisez des générateurs de séquences (comme dans l'exemple de la dimension de la date) plutôt que des CTE récursifs.
-- 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();
Comprendre ces cas limites et ces techniques d'optimisation vous aidera à écrire une logique de manipulation de date plus robuste dans Snowflake, en évitant les pièges courants tout en maximisant les performances.
Conclusion
La fonction Snowflake DATEADD
est un outil essentiel pour la manipulation des dates qui permet aux professionnels des données d'effectuer une arithmétique temporelle sur différentes parties de la date. Il gère les dates de fin de mois, les années bissextiles, les fuseaux horaires et les transitions vers l'heure d'été avec un comportement prévisible. Nous avons vu comment DATEADD
peut être appliqué à la gestion des abonnements, au suivi des livraisons, à la création de dimensions de date et aux calculs de facturation. Lorsqu'il est utilisé avec DATEDIFF
et DATE_TRUNC
, il devient un composant essentiel pour les analyses basées sur le temps dans Snowflake.
Pour en savoir plus sur Snowflake, consultez le cursus de compétences Snowflake Foundations ou explorez Creating Tables in Snowflake pour développer vos compétences en modélisation de données. Le guide d' utilisation du voyage dans le temps de Snowflake complète votre compréhension des opérations temporelles. Les débutants devraient commencer par le didacticiel Snowflake pour débutants.
Snowflake DATEADD FAQs
À quoi sert la fonction DATEADD de Snowflake ?
La fonction Snowflake DATEADD
permet d'effectuer des opérations arithmétiques sur les dates en ajoutant ou en soustrayant des intervalles de temps spécifiques (comme des jours, des mois ou des années) à des valeurs de date, d'heure ou d'horodatage. Il est couramment utilisé pour calculer les dates futures, les renouvellements d'abonnement et l'analyse des séries temporelles.
Comment DATEADD gère-t-il les dates de fin de mois et les années bissextiles ?
DATEADD
gère intelligemment les dates de fin de mois en préservant le concept de "fin de mois". Lorsque vous ajoutez des mois à une date de fin de mois, vous obtenez le dernier jour du mois résultant. Pour les années bissextiles, il ajuste automatiquement les dates en conséquence (par exemple, en ajoutant une année au 28 février 2023, on obtient le 29 février 2024).
Quelles sont les parties de la date prises en charge par DATEADD ?
DATEADD
prend en charge diverses pièces de date, y compris YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND, NANOSECOND, and CENTURY
. Chaque partie de la date vous permet d'ajouter ou de soustraire cette unité de temps spécifique à une valeur de date.
DATEADD peut-il être utilisé avec différents types d'horodatage ?
Oui, DATEADD
fonctionne avec tous les types d'horodatage de Snowflake : TIMESTAMP_NTZ
(sans fuseau horaire), TIMESTAMP_TZ
(avec fuseau horaire) et TIMESTAMP_LTZ
(fuseau horaire local). Il préserve le type d'horodatage et gère automatiquement les conversions de fuseaux horaires.
En quoi DATEADD diffère-t-il de DATEDIFF et DATE_TRUNC ?
Alors que DATEADD
modifie les dates en ajoutant ou en soustrayant des intervalles de temps, DATEDIFF
calcule la différence entre deux dates dans une unité spécifiée, et DATE_TRUNC
supprime la précision d'une valeur de date/heure en l'arrondissant à l'unité inférieure. Ils servent des objectifs différents mais complémentaires dans la manipulation des dates.

Je suis un créateur de contenu en science des données avec plus de 2 ans d'expérience et l'un des plus grands followings sur Medium. J'aime écrire des articles détaillés sur l'IA et la ML dans un style un peu sarcastıc, car il faut bien faire quelque chose pour les rendre un peu moins ennuyeux. J'ai produit plus de 130 articles et un cours DataCamp, et un autre est en cours d'élaboration. Mon contenu a été vu par plus de 5 millions de personnes, dont 20 000 sont devenues des adeptes sur Medium et LinkedIn.