Comparaison des fonctions DATEADD et DATEDIFF

Mis à jour : 14 avril 2006

La fonction DATEADD ajoute un intervalle à la date spécifiée. Par exemple, si l'échéance de toutes les commandes de la table SalesOrderHeader était décalée de 3 jours, vous pourriez obtenir les nouvelles dates en exécutant l'instruction suivante :

USE AdventureWorks;
GO
SELECT DATEADD(day, 3, DueDate)
FROM Sales.SalesOrderHeader;
GO

Si le paramètre date est de type smalldatetime, le résultat est lui aussi de type smalldatetime. Vous pouvez utiliser DATEADD pour ajouter des secondes ou des millièmes de seconde à une valeur smalldatetime, mais cette opération n'a de sens que si la date retournée par DATEADD évolue d'au moins 1 minute par rapport à la date spécifiée.

La fonction DATEDIFF calcule le temps écoulé sous forme de parties de date entre la deuxième et la première date que vous spécifiez. En d'autres termes, elle recherche un intervalle entre deux dates. Le résultat est une valeur entière avec signe, égale à date2 - date1 sous forme de parties de date.

La requête suivante utilise la date November 30, 2001 et trouve le nombre de jours écoulés entre DueDate et cette date :

USE AdventureWorks;
GO
SELECT DATEDIFF(day, DueDate, 'Nov 30 2001')
FROM Sales.SalesOrderHeader;
GO

Les lignes de SalesOrderHeader pour lesquelles l'échéance (DueDate) est le 21 octobre 2001 produisent un résultat de 40 avec la requête précédente (il y a 40 jours entre le 21 octobre et le 30 novembre). Pour calculer un intervalle en mois, utilisez la requête suivante :

USE AdventureWorks;
GO
SELECT interval = DATEDIFF(month, DueDate, 'Nov 30 2001')
FROM Sales.SalesOrderHeader;
GO

Cette requête renvoie la valeur 1 pour les lignes dont DueDate (échéance) est en octobre, et la valeur 5 pour les lignes dont DueDate est en juin.

Dans une fonction DATEDIFF, lorsque la première date est postérieure à la seconde date spécifiée, le résultat donne une valeur négative.

Si l'un des arguments ou si les deux arguments de date correspondent à la valeur smalldatetime, ils sont convertis en interne en valeur datetime pour le calcul. Lors de cette conversion, les secondes et les millièmes de seconde des valeurs smalldatetime sont automatiquement mis à 0 pour les besoins du calcul.

ms187081.note(fr-fr,SQL.90).gifRemarque :
DATEDIFF retourne le nombre de limites de date et d'heure traversées entre deux dates spécifiées. Dans l'exemple suivant, la première instruction retourne 1 année (c'est-à-dire, 2006 - 2005 = 1). La seconde instruction retourne 1 mois (c'est-à-dire, Jan 2006 - Déc 2005). La troisième instruction retourne 12 pour le nombre de jours écoulés entre les deux dates.
SELECT DATEDIFF(year, '20051220', '20060101')
SELECT DATEDIFF(month, '20051220', '20060101')
SELECT DATEDIFF(day, '20051220', '20060101')

Voir aussi

Autres ressources

CAST et CONVERT (Transact-SQL)
DATENAME (Transact-SQL)
Fonctions de date et d'heure (Transact-SQL)
DATEPART (Transact-SQL)
DATEADD (Transact-SQL)
GETDATE (Transact-SQL)
DATEDIFF (Transact-SQL)
SET DATEFORMAT (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

14 avril 2006

Nouveau contenu :
  • Ajout d'informations qui expliquent comment DATEDIFF calcule la différence entre les parties de date.