Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

DATEADD() Exemples dans SQL Server

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 )

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.