DATEADD : Ajouter ou supprimer une unité de date dans une date

Comment :

Langages disponibles : reporting, Maintain

La fonction DATEADD sert à ajouter ou à supprimer une unité dans un format de date de composant complet. L'unité peut être l'un des éléments suivants :

DATEADD nécessite une date pour être au format de date. Puisque le Gestionnaire de dialogue interprète une date comme alphanumérique ou numérique, et que DATEADD nécessite une date standard stockée comme décalage de la date de base, n'utilisez pas DATEADD avec le Gestionnaire de dialogue à moins que vous ne convertissiez d'abord la variable comme date de saisie à un décalage à partir de la date de base.

Pour plus d'informations, consultez Appeler une fonction à partir d'une commande Dialog Manager.

Vous ajoutez ou supprimez des dates sans jours (par exemple, YM ou YQ) directement sans utiliser DATEADD.

DATEADD ne fonctionne qu'avec les composants de date complets.


Haut de page

x
Syntaxe : Ajouter ou supprimer une unité de date dans une date
DATEADD(date, 'component', increment)

où :

date

Date

est une date de composant complète.

component

Alphanumérique

est l'une des unités suivantes entourés par des guillemets simples :

'Y' représente un composant année.

'M' signale un composant de mois.

'D' signale un composant de jour.

'WD' signale un composant de jour de la semaine.

'BD' signale un composant de jour de travail.

increment

Entier

est le nombre d'unités de date ajoutées à ou soustraites de date. Si ce nombre n'est pas une unité complète, elle est arrondie au chiffre inférieure.

Remarque : DATEADD n'utilise pas d'argument de sortie. Utilise le format de l'argument date pour le résultat. Pourvu que le résulat est une date de composant entière, il peut être affecté qu'à un champ de date composant entier



Exemple : Truncation avec DATEADD

Le nombre d'unités transmises à DATEADD est toujours une unité entière. Par exemple

DATEADD(DATE, 'M', 1.999)

ajouter un mois puisque le nombre d'unités est inférieur à deux.



Exemple : Utiliser l'unité Jour de la semaine

Si vous utilisez l'unité Jour de semaine et Samedi ou Dimanche comme date de saisie, DATEADD change la date de saisie à Lundi. La fonction

DATEADD('910623', 'WD', 1)

dans laquelle DATE est soit Samedi ou Dimanche donne Mardi, Samedi et Dimanche ne sont pas des jours de la semaine, par conséquent, DATEADD commence avec Lundi et ajoute en un.

Notez que le guillemet simple autour du nombre dans le premier argument, '910623' le mène à être considéré comme littéral de date naturel.



Exemple : Ajouter des jours de la semaine à une date (Reporting)

DATEADD ajoute trois jours de la semaine à NEW_DATE. Dans certains cas, on ajoute plus que trois jours, car HIRE_DATE_PLUS_THREE peut être sinon en fin de semaine.

TABLE FILE EMPLOYEE
PRINT FIRST_NAME AND HIRE_DATE AND COMPUTE
NEW_DATE/YYMD = HIRE_DATE;
HIRE_DATE_PLUS_THREE/YYMD = DATEADD(NEW_DATE, 'WD', 3);
BY LAST_NAME
WHERE DEPARTMENT EQ 'MIS';
END

La sortie est :

LAST_NAME     FIRST_NAME  HIRE_DATE  NEW_DATE    HIRE_DATE_PLUS_THREE
---------     ----------  ---------  --------    --------------------
BLACKWOOD     ROSEMARIE    82/04/01  1982/04/01  1982/04/06
CROSS         BARBARA      81/11/02  1981/11/02  1981/11/05
GREENSPAN     MARY         82/04/01  1982/04/01  1982/04/06
JONES         DIANE        82/05/01  1982/05/01  1982/05/06
MCCOY         JOHN         81/07/01  1981/07/01  1981/07/06
SMITH         MARY         81/07/01  1981/07/01  1981/07/06


Exemple : Déterminer si une date est un jour de travail (Reporting)

DATEADD détermine quelles valeurs dans le champ TRANSDATE ne représentent pas des jours de travail en ajoutant zéro jour à TRANSDATE avec l'unité de jour ouvrable. Si TRANSDATE ne représente par un jour ouvrable, DATEADD renvoie le prochain jour ouvrable à DATEX. TRANSDATE est ensuite comparé à DATEX, et le jour de la semaine est imprimé pour toutes les dates qui ne correspondent pas entre les deux champs, entraînant comme résultat une liste composée entièrement de jours non travaillés.

DEFINE FILE VIDEOTRK
DATEX/YMD  = DATEADD(TRANSDATE, 'BD', 0);
DATEINT/I8YYMD = DATECVT(TRANSDATE, 'YMD','I8YYMD');
END
TABLE FILE VIDEOTRK
SUM TRANSDATE NOPRINT
COMPUTE DAYNAME/A8 = DOWKL(DATEINT, DAYNAME); AS 'Day of Week'
BY TRANSDATE AS 'Date'
WHERE TRANSDATE NE DATEX
END

La sortie est :

Date      Day of Week 
----      ----------- 
91/06/22  SATURDAY
91/06/23  SUNDAY
91/06/30  SUNDAY


Exemple : Ajouter des mois à une date (Maintain)

DATEADD ajoute des mois au champ DATE1 :

MAINTAIN
compute DATE1/yymd = '20000101'
compute DATE2/yymd=dateadd(date1, 'M', 2, date2);
type "DATE1 = <<DATE1 + 2 MONTHS =  DATE2 = <<DATE2"
END

Le résultat est :

DATE1 = 2000/01/01+ 2 MONTHS =  DATE2 = 2000/03/01

WebFOCUS