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
Mac en entreprise : le levier d’un poste de travail moderne
Ce livre blanc répond aux 9 questions clés des entreprises sur l’intégration du Mac : sécurité, compatibilité, gestion, productivité, coûts, attractivité talents, RSE et IA, et l’accompagnement sur mesure proposé par inmac wstore.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Ransomware en santé : la double extorsion fait exploser la facture en Europe
- Les fuites de données explosent en France, désormais pays le plus touché d’Europe
- L’IA accélère les attaques et expose les identités non gouvernées
- Identités machines et supply chain : l’erreur stratégique des entreprises en cybersécurité
Articles les + lus
Model Context Protocol : le contexte, grand oublié du débat
Microsoft dévoile MAI-Thinking-1 : un modèle de raisonnement « enterprise-grade » en preview publique
Couchbase lance AI Data Plane pour industrialiser l’IA agentique
Windows 11 : Microsoft généralise le point-in-time restore pour accélérer la remise en service des PC
Computex 2026 : 5 signaux forts à retenir
À la une de la chaîne Tech
- Model Context Protocol : le contexte, grand oublié du débat
- Microsoft dévoile MAI-Thinking-1 : un modèle de raisonnement « enterprise-grade » en preview publique
- Couchbase lance AI Data Plane pour industrialiser l’IA agentique
- Windows 11 : Microsoft généralise le point-in-time restore pour accélérer la remise en service des PC
- Computex 2026 : 5 signaux forts à retenir
