Dans SQL Server, vous pouvez utiliser le DATEADD()
fonction pour ajouter une période de temps spécifiée à une date donnée. Vous pouvez également l'utiliser pour soustraire une période de temps spécifiée.
Vous pouvez également combiner DATEADD()
avec d'autres fonctions pour formater la date selon les besoins. Par exemple, vous pouvez prendre '2020-10-03', ajouter 10 ans, puis renvoyer le composant d'année (augmenté).
Cet article contient des exemples à démontrer.
Syntaxe
La syntaxe de DATEADD()
va comme ceci :
DATEADD (partie de date , nombre , date )
Où datepart
est la partie de la date que vous souhaitez augmenter (ou diminuer), number
est le montant à augmenter datepart
par et date
est la date à laquelle l'ajout aura lieu.
Exemple 1
Voici un exemple simple d'ajout de dix ans à une date :
SELECT DATEADD(year, 10, '2020-10-03') AS 'Future Date' ;
Résultat :
+-------------------------+| Date future ||------------------------------|| 2030-10-03 00:00:00.000 |+-------------------------+
Dans ce cas, la valeur de retour inclut le composant heure ainsi que la date. C'est parce que le résultat est renvoyé sous forme de datetime valeur. La raison pour laquelle il est renvoyé comme ce type de données est que nous avons fourni un littéral de chaîne comme date
argument. Lorsque vous fournissez un littéral de chaîne comme date, DATEADD()
renvoie une datetime valeur.
Dans les cas où vous ne fournissez pas de littéral de chaîne, la valeur de retour est la même que le type de données de la date
argument. Par exemple, si vous fournissez un datetime2 argument, la valeur de retour sera datetime2 .
Exemple 2 - Formatage du résultat
Nous pouvons prendre le résultat ci-dessus et le formater avec le FORMAT()
fonction :
SELECT FORMAT(DATEADD(year, 10, '2020-10-03'), 'yyyy-MM-dd') AS 'yyyy-MM-dd', FORMAT(DATEADD(year, 10, '2020-10 -03'), 'jj/MM/aaaa') AS 'jj/MM/aaaa', FORMAT(DATEADD(année, 10, '2020-10-03'), 'aaaa') AS 'aaaa', FORMAT( DATEADD(année, 10, '2020-10-03'), 'aa') AS 'aa';
Résultat :
+--------------+-------------+--------+------+ | aaaa-MM-jj | jj/MM/aaaa | aaaa | aa ||--------------+-------------+--------+------|| 2030-10-03 | 03/10/2030 | 2030 | 30 |+--------------+-------------+--------+------+Mais il est important de noter que le
FORMAT()
la fonction renvoie son résultat sous forme de chaîne.Une autre option consiste à utiliser
CONVERT()
pour convertir le résultat en une date type de données :SELECT CONVERT(date, DATEADD(year, 10, '2020-10-03')) AS Converted ;Résultat :
+-------------+| Converti ||-------------|| 2030-10-03 |+-------------+Ou vous pouvez utiliser une fonction comme
YEAR()
, qui renvoie le résultat sous la forme d'un entier :SELECT YEAR(DATEADD(year, 10, '2020-10-03')) AS 'Future Year' ;Résultat :
+---------------+| Année future ||---------------|| 2030 |+---------------+Exemple 3 – Soustraire des dates
Vous pouvez utiliser des nombres négatifs pour soustraire de la date :
SELECT DATEADD(year, -10, '2020-10-03') AS 'Earlier Date' ;Résultat :
+-------------------------+| Date antérieure ||-------------------------|| 2010-10-03 00:00:00.000 |+------------------------------+Et bien sûr, vous pouvez le formater en utilisant l'une des méthodes mentionnées précédemment.
Exemple 4 – Dates système
Voici quelques exemples d'utilisation de diverses fonctions pour renvoyer la date/heure actuelle à partir de l'ordinateur sur lequel l'instance de SQL Server s'exécute.
SYSDATETIME()
SELECT SYSDATETIME() AS 'Current Date', DATEADD(year, 10, SYSDATETIME()) AS 'Future Date';Résultat :
+-------------------------------------------+---------------- --------------+| Date actuelle | Date future ||-----------------------------+---------------- --------------|| 2018-06-04 05:57:51.7297042 | 2028-06-04 05:57:51.7297042 |+-----------------------------+-------- ---------------------+SYSDATETIMEOFFSET()
SELECT SYSDATETIME() AS 'Current Date', DATEADD(year, 10, SYSDATETIME()) AS 'Future Date';Résultat :
+--------------------------+---------------------------- -------+| Date actuelle | Date future ||--------------------------+------------------- -------|| 06/04/18 06:02:07 +00:00 | 06/04/28 06:02:07 +00:00 |+--------------------------+------ --------------------+Comme mentionné, ces résultats sont renvoyés en utilisant le type de données de la
date
argument (car ce ne sont pas des littéraux de chaîne).Formater la sortie
SELECT YEAR(SYSDATETIME()) AS 'Current Year', YEAR(DATEADD(year, 10, SYSDATETIME())) AS 'Future Year';Résultat :
+----------------+---------------+| Année en cours | Année future ||----------------+---------------|| 2018 | 2028 |+----------------+---------------+Et comme également mentionné, si vous formatez la date, elle sera renvoyée dans le type de données de la fonction applicable. Ainsi, dans cet exemple, le résultat est renvoyé sous la forme d'un int . Si nous l'avions formaté avec le
FORMAT()
fonction, elle serait renvoyée sous forme de chaîne.