Accéder au contenu principal

Snowflake DATEADD : Un guide complet avec des exemples pratiques

Apprenez à utiliser la fonction DATEADD de Snowflake pour la manipulation des dates à l'aide d'exemples concrets. Maîtrisez les calculs de temps, traitez les cas extrêmes et optimisez les performances de vos requêtes SQL.
Actualisé 2 juil. 2025  · 10 min de lecture

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 :

  1. Connectez-vous à votre compte Snowflake
  2. Naviguez vers Feuilles de travail à partir du menu principal
  3. Cliquez sur le bouton "+" pour créer une nouvelle feuille de calcul.
  4. 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 un DATE
  • Lorsqu'elle est appliquée à un TIMESTAMP, elle renvoie un TIMESTAMP
  • Lorsqu'elle est appliquée à un TIME, elle renvoie un TIME

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 :

Le résultat d'une requête Snowflake qui utilise la fonction dateadd

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 :

  1. Crée une fenêtre de livraison de 12 heures en soustrayant 12 heures au délai de livraison estimé.
  2. Indique le début et la fin de la fenêtre de livraison
  3. Calcule le délai de livraison total estimé en heures

Sortie:

Le résultat d'une requête Snowflake qui utilise la fonction dateadd

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 :

  1. Utilise DATEADD avec un générateur de séquences pour créer une série de dates pour 2023.
  2. Extrait les attributs de date utiles pour chaque date du calendrier
  3. Filtre sur le premier trimestre 2023 et affiche les 10 premiers jours par souci de concision.

Sortie :

Le résultat d'une requête Snowflake qui utilise la fonction dateadd

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 :

  1. Recherche d'événements à venir (ceux qui se dérouleront dans le futur)
  2. Calcule le moment où les préparatifs doivent commencer (3 jours avant l'événement)
  3. Calcule la date de fin de l'événement en fonction de sa durée.
  4. 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 :

  1. 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() )
  2. 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)
  3. 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).
  4. 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.
  5. Filtre pour inclure uniquement les abonnements mensuels avec la clause WHERE
  6. Ordonne les résultats par subscription_id et par période de facturation pour une présentation logique

Sortie:

Le résultat d'une requête Snowflake qui utilise la fonction dateadd

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 DATEADDse 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_TRUNCen 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:

Le résultat d'une requête Snowflake qui utilise la fonction dateadd

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;

Le résultat d'une requête Snowflake qui utilise la fonction dateadd

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 :

  1. Appliquez le site DATEADD en le transformant plutôt qu'en le filtrant lorsque c'est possible.
  2. Précalculer les calculs de date courants dans des tableaux temporaires ou des ETC en cas d'utilisation multiple.
  3. Envisagez d'utiliser DATE_TRUNC avant DATEADD pour les calculs basés sur l'intervalle afin d'améliorer l'utilisation de l'index.
  4. 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.


Bex Tuychiev's photo
Author
Bex Tuychiev
LinkedIn

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. 

Sujets

Les meilleurs cours de DataCamp

Cursus

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.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow