SQL DATEDIFF()

Dans le langage SQL, la fonction DATEDIFF() permet de déterminer l’intervalle entre 2 dates spécifiées. La fonction est utilisée avec les systèmes MySQL et SQL Server, mais s’utilise différemment :

  • MySQL : la fonction prend 2 dates en paramètres et retourne le nombre de jours entre les 2 dates
  • SQL Server : la fonction prend 2 dates ainsi qu’un paramètre déterminant sous quel intervalle de distance temporelle le résultat doit être retourné (nombre de jours entre 2 dates, nombre d’années, nombre de semaines, nombre d’heures …)

Syntaxe

MySQL

Sous MySQL, la fonction DATEDIFF() s’utilise dans une requête avec le format suivant :

SELECT DATEDIFF( date1, date2 );

Les dates doivent être au format DATE (cf. AAAA-MM-JJ) ou DATETIME (cf. AAAA-MM-JJ HH:MM:SS). Pour que le résultat soit positif il faut que la date1 soit plus récente que la date2.

SQL Server

Sous SQL Server, la donction DATEDIFF s’utilise un peu différemment. La fonction doit respecter la syntaxe suivante :

SELECT DATEDIFF( type_limite, date1, date2 );

Le paramètre « type_limite » permet de spécifier si le résultat doit être exprimé en jour, semaine, mois, année … Ce paramètre utilise l’une de ses valeurs : year, quarter, month, dayofyear, day, week, weekday, hour, minute, second, millisecond, microsecond ou nanosecond.

Pour reproduire le même fonctionnement que la fonction DATEDIFF() de MySQL, il convient d’utiliser la valeur « day » pour le paramètre « type_limite ».

Les dates peuvent être au format TIME, DATE, SMALLDATETIME, DATETIME, DATETIME2 ou DATETIMEOFFSET. Pour que le résultat soit positif il faut que la date2 soit plus récente que la date1.

Exemple

MySQL

La fonction peut s’utiliser pour faire la comparaison entre 2 dates d’une table ou peut s’utiliser en utilisant directement les dates.

Voici une liste d’exemples concrets :

SELECT DATEDIFF('2014-01-09', '2014-01-01'); -- retourne : 8
SELECT DATEDIFF('2014-01-09 00:00:00', '2014-01-01 00:00:00'); -- retourne : 8
SELECT DATEDIFF('2014-01-01', '2014-01-09'); -- retourne : -8
SELECT DATEDIFF('2015-01-01', '2014-01-01'); -- retourne : 365
SELECT DATEDIFF('2014-01-02', '2014-01-01'); -- retourne : 1
SELECT DATEDIFF('2014-01-02 23:59:59', '2014-01-01'); -- retourne : 1

SQL Server

La fonction DATEDIFF() sous SQL Server peut s’utiliser d’une façon presque similaire, mais les dates doivent être inversées pour obtenir le même résultat qu’avec MySQL.

SELECT DATEDIFF(day, '2014-01-09', '2014-01-01'); -- retourne : -8
SELECT DATEDIFF(day, '2014-01-09 00:00:00', '2014-01-01 00:00:00'); -- retourne : -8
SELECT DATEDIFF(day, '2014-01-01', '2014-01-09'); -- retourne : 8
SELECT DATEDIFF(day, '2015-01-01', '2014-01-01'); -- retourne : -365
SELECT DATEDIFF(day, '2014-01-02', '2014-01-01'); -- retourne : -1
SELECT DATEDIFF(day, '2014-01-02 23:59:59', '2014-01-01'); -- retourne : -1
Partager