Dans cette section : |
Une expression de date fait un calcul numérique impliquant des dates.
Une expression de date renvoie une date, un composant de date ou un nombre entier qui représente le nombre de jours, de mois, de trimèstres ou d'années entre deux dates. Vous pouvez écrire directement une expression de date qui se compose des éléments suivants :
COMPUTE END_DATE/MDYY = 'FEB 29 2000';
Cela exige que la constante de date soit entourée de guillemets simples.
COMPUTE NEWDATE/YMD = START_DATE;
COMPUTE OLDDATE/I6YMD = 980307; COMPUTE NEWDATE/YMD DFC 19 YRT 10 = OLDDATE;
COMPUTE CONVERTED_HDT/YMD = HIRE_DATE; HIRE_DATE_PLUS_THIRTY/YMD = CONVERTED_HDT + 30;
COMPUTE DIFF/I4 = YMD (HIRE_DATE,FST.DAT_INC);
Référence : |
Vous pouvez employer les dates de deux manières :
Lorsqu'elle s'affiche, la valeur du nombre entier est convertie en la date correspondante au format spécifié pour le champ. Le format peut être spécifié dans le fichier Master ou dans la commande qui utilise une expression pour attribuer une valeur au champ. Ces champs étaient connus auparavant comme des champs formatés à date intelligente.
Vous pouvez convertir une date à un certain format en une date à un autre format en attribuant tout simplement un format à l'autre. Par exemple, les attributions suivantes prennent une date stockée en tant que champ alphanumérique, formatée avec les options de modification de date, et la convertissent en une date stockée en tant que champ de date temporaire :
COMPUTE ALPHADATE/A6MDY = '120599' ; REALDATE/MDY = ALPHADATE;
Le tableau suivant montre la date de base pour chaque format de date supporté :
Format |
Date de base |
---|---|
YMD, YYMD, MDYY, DMYY, MDY, and DMY |
1900/12/31 |
YM, YYM, MYY, and MY |
1901/01 sur z/OS 1900/12/31 sur Windows et UNIX |
YQ, YYQ, QYY, and QY |
1901 Q1 |
JUL and YYJUL |
1900/365 |
D M Y, YY Q W |
Il n'y a aucune date de base pour ces formats ; ce ne sont que des nombres et non pas des dates. |
Notez que la date de base utilisée pour les fonctions DA et DT est le 31 décembre 1899. Pour plus de détails à propos des fonctions de date, consultez Utiliser les fonctions .
La table suivante illustre la façon dont le format de champ influe sur le stockage et l'affichage :
Format date (par exemple, MDYY) |
Nombre entier, Condensé, Décimal ou Alphanumérique (par exemple, A8MDYY) | |||
---|---|---|---|---|
Valeur |
Stocké |
Affichée |
Stocké |
Affichée |
Février 28, 1999 |
35853 |
02/28/1999 |
02281999 |
02/28/1999 |
1 mars 1999 |
35854 |
03/01/1999 |
03011999 |
03/01/1999 |
Le format d'un champ détermine la façon dont vous pouvez utiliser le champ dans une expression de date. Le calcul des dates au format de date peut incorporer des opérateurs numériques ainsi que des fonctions numériques. Les calculs faits sur des dates aux formats entier, condensé, décimal ou alphanumérique requièrent l'utilisation de fonctions de date. Les opérateurs numériques renvoient un message d'erreur ou un résultat erroné.
Votre logiciel est muni d'un ensemble de fonctions qui vous permettent de manipuler les dates au format nombre entier, décimal condensé et alphanumérique. Pour plus de détails à propos des fonctions de date, consultez Utiliser les fonctions .
Supposez que votre société gère une base de données de livraison (SHIPPING). L'exemple suivant calcule combien de jours il faut au département de livraison pour répondre à une commande en soustrayant la date de commande du produit, voire ORDER_DATE, de la date d'expédition, voire SHIPDATE :
COMPUTE TURNAROUND/I4 = SHIP_DATE - ORDER_DATE;
Un produit commandé le 28 février 1999, et livré le 1 mars 1999, a pour résultat un jour de différence. Cependant, si les champs SHIP_DATE et ORDER_DATE sont au format nombre entier, le résultat du calcul (730000) est faux, car vous ne pouvez par utiliser l'opérateur numérique moins
Le tableau suivant montre la façon dont le format de champ influence le résultat :
Valeur au format de date | Valeur au format entier | |
---|---|---|
SHIP_DATE = March 1, 1999 | 35854 | 03011999 |
ORDER_DATE = February 28, 1999 | 35853 | 02281999 |
TURNAROUND | 1 | 730000 |
Pour obtenir le résultat correcte en utilisant des champs au format nombre entier, condensé, décimal ou alphanumérique, utilisez la fonction de date MJA, qui renvoie la différence entre deux dates au format mois/jour/an. En utilisant la fonction MJA, vous pouvez calculer le champ TURNAROUND comme suit :
COMPUTE TURNAROUND/I4 = MDY(ORDER_DATE, SHIP_DATE);
Vous pouvez utiliser une expression dans une commande DEFINE ou COMPUTE, ou dans l'attribut DEFINE dans un fichier Master, qui emploie la technique de fenêtre dynamique pour le traitement des dates s'étendant sur deux siècles. Les paramètres DEFCENT et YRTHRESH fournissent un moyen d'interpréter le siècle si les deux premiers chiffres de l'année ne se trouvent pas ailleurs. Où les deux premiers chiffres sont fournis, ils sont simplement acceptés.
Pour plus de détails à propos de la technique de fenêtre dynamique, consultez Utilisation de dates s'étendant sur deux siècles dans la section supplémentaire de la documentation sur CD-rom de WebFOCUS.
Une expression de date renvoie toujours un nombre. Ce nombre peut représenter une date, ou le nombre de jours, de mois, de trimèstres ou d'années entre deux dates. Lorsque vous utilisez une expression de date pour attribuer une valeur à un champ, le format sélectionné pour le champ détermine la façon dont le résultat est renvoyé.
Prenez en considération les commandes suivantes, en supposant que les champs SHIP_DATE and ORDER_DATE sont au format de date. La première commande calcule combien de jours il faut à un département de livraison pour répondre à une commande en soustrayant la date de commande du produit, voire ORDER_DATE, de la date d'expédition, voire SHIP_DATE. La deuxième commande calcule la date de livraison en ajoutant cinq jours à la date d'expédition.
COMPUTE TURNAROUND/I4 = SHIP_DATE - ORDER_DATE; COMPUTE DELIVERY/MDY = SHIP_DATE + 5;
Dans la première commande, l'expression de date renvoie le nombre de jours il faut pour répondre à la commande. Le champ associé TURNAROUND, doit être donc au format nombre entier. Dans la deuxième commande, l'expression de date renvoie la date de livraison du produit. Le champ associé, DELIVERY, doit être donc au format de date.
Lorsque vous utilisez une constante de date dans un calcul avec un champ au format de date, vous devez entourer cette première de guillemets simples ; sinon, elle est interprétée comme le nombre de jours entre la constante et la date de base (le 31 décembre 1900 ou le 1 janvier 1901). Par exemple, si le nombre 022899 n'est pas entouré de guillemets, sa valeur est interprétée comme le 22899ième jour après le 31/12/1900, et non pas le 28 février 1999.
La commande suivante initialise le champ START_DATE avec la constante de date 02/28/99 :
COMPUTE START_DATE/MDY = '022899';
La commande suivante calcule le nombre de jours écoulés depuis le 1 janvier 1999 :
COMPUTE YEAR_TO_DATE/I4 = CURR_DATE - 'JAN 1 1999' ;
Parmi les composants de date sont les jours, mois, trimestres et années. Vous pouvez écrire une expression qui extrait un composant d'un champ au format de date. Cependant, vous ne pouvez pas écrire une expression qui extrait des jours, mois ou trimèstres d'une date n'ayant pas ces composants. Par exemple, vous ne pouvez pas extraire un mois d'une date au format YY, qui représente seulement le nombre d'années.
L'exemple suivant extrait le composant MONTH [mois] de SHIP_DATE, qui est au format MDYY : : extraction de composants ;
COMPUTE SHIP_MONTH/M = SHIP_DATE;
Si la valeur du champ SHIP_DATE est le 1 mars 1999, l'expression ci-dessus renvoie la valeur 03 pour SHIP_MONTH.
Un calcul d'un composant de date crée automatiquement une valeur valable pour le composant souhaité. Par exemple, si la valeur actuelle de SHIP_MONTH est 03, l'expression suivante renvoie correctement la valeur 06 :
COMPUTE ADD_THREE/M = SHIPMONTH + 3;
Si l'ajout de mois produit un nombre supérieur à douze, les mois sont réglés correctement (par exemple, 11 + 3 = 2, non pas 14).
Lorsque vous utilisez des champs au format date, vous pouvez les combiner en une seule expression, même si leurs composants ne sont pas dans le même ordre. En plus, vous pouvez attribuer le résultat d'une expression de date à un champ ayant un autre ordre de composants à partir des champs dans l'expression.
Pourtant, vous ne pouvez pas écrire une expression combinant des dates au format de date et des dates au format nombre entier, condensé, décimal ou caractères.
Prenez en considération les deux champs DATE_PAID et DUE_DATE. DATE_PAID est au format AAMJ et DUE_DATE est au format MJA. Vous pouvez combiner ces deux champs dans une expression afin de calculer le nombre de jours de retard d'un paiement :
COMPUTE DAYS_LATE/I4 = DATE_PAID - DUE_DATE;
Prenez en considération le champ DATE_SOLD. Ce champ comprend une date à laquelle un produit est vendu, au format AAMJ. L'expression suivante ajoute sept jours au champ DATE_SOLD afin de déterminer la dernière date à laquelle l'on peut retourner le produit. Ensuite, elle attribut le résultat à un champ au format JMA :
COMPUTE RETURN_BY/DMY = DATE_SOLD + 7;
WebFOCUS |