S'il est prévu d'effectuer des calculs sur les dates, il vaut mieux vérifier l'indicateur null. Mathématiquement parlant, les dates nulles contiennent 01/01/0001, ce qui risque de ne pas produire les résultats escomptés. Ainsi, la ligne de code suivante calcule le nombre de jours entre une date de début (STRDAT) et
Calculs avec des champs potentiellement nuls

une date de fin
(ENDDAT), en plaçant le résultat dans un champ appelé DIFF :
C ENDDAT SubDur STRDAT DIFF:*Days
Tout va bien jusqu’à ce que ENDDAT contienne une date nulle, auquel cas DIFF aboutit
à un grand nombre négatif. Par exemple, si on utilise une valeur STRDAT au 4 septembre
1998 et une valeur ENDDAT nulle, la différence (DIFF) sera de -729635. La situation
ressemble à celle de la division, dans laquelle il faut d’abord vérifier si le
diviseur est égal à zéro et agir en conséquence.
La figure 8a présente un exemple qui, en cas de date nulle, met DIFF à zéro. Bien
que cette solution fonctionne, elle est techniquement incorrecte et sert à illustrer
la différence entre zéro et null. Nous disons qu’une date de fin nulle produit
une différence de 0 jours mais, en réalité, nous admettons que nous ne pouvons
pas donner une différence, ne connaissant pas encore la date de fin. Quand les
dates de début et de fin sont identiques, nous prenons la partie Else de l’instruction
If, effectuons le calcul mathématique… et aboutissons à une différence de 0
jour. Dans ce cas, zéro prend sa signification exacte : il n’y a pas de différence
entre les dates de début et de fin.
Cette méthode risque d’entraîner des problèmes si l’on utilise le champ DIFF pour
prendre des décisions ultérieurement. Si par exemple on recherche des contrats
ouverts en testant une valeur zéro dans DIFF, on obtient le résultat souhaité,
mais aussi d’éventuels contrats terminés le jour même de leur démarrage. Selon
l’application, cela peut poser ou non un problème mais montre bien qu’il faut
s’efforcer de prévoir toutes les futures utilisations des données.
La bonne solution consiste à permettre à DIFF de contenir des valeurs nulles,
en ajoutant le mot clé ALWNULL à la définition DDS du champ et en rendant sa valeur
nulle au lieu de 0 quand ENDDAT est null. Cette solution crée une correspondance
de un à un entre le champ DIFF et une situation de gestion réelle : un DIFF null
signe un contrat ouvert, tandis qu’un DIFF à 0 signe un contrat fermé (… et
bref). La figure 8b contient le code à cet effet.
Téléchargez cette ressource

Etude « RSE 2023 » avec Atos et EcoAct
La réglementation qui oblige désormais les entreprises à agir vertueusement envers le climat, va se renforcer pour évaluer les efforts et la communication de leurs actions et leur suivi. L’enquête d’Atos vise à déterminer la connaissance des entreprises sur les réglementations et les obligations qui leur incombent. Voici 10 questions qui vous permettront de faire un état des lieux.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Une nouvelle culture de la donnée pour une prise de décision optimisée
- ESG, initiatives réussies pour les télécoms
- Paessler relève les défis de la supervision d’un monde en évolution
- DPO : 5 ans après le RGPD, comment collaborer avec le RSSI ?
- EGERIE analyse les risques financiers liés aux risques cyber
