|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||
|
Invité régulier
![]() Inscription : novembre 2006 Messages : 19 ![]() |
Bonjour,
Je récupère une date dans ma base de données DB2. Je veux ensuite manipuler les chiffres à l'intérieur de cette date (le jour, le mois, l'année) pour faire des soustractions et multiplications. Bref, j'ai déclaré une variable comme suit, mais ça ne compile pas lors d'un calcul (ex. SUBTRACT 1 FROM WS-TEMP-DD) Code :
Code :
Code :
Code :
Merci et bonne journée |
||||||||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() ![]() |
Bonjour.
Si tu veux faire des opérations arithmétiques sur les dates tu peux utiliser les fonctions ADD-DURATION, SUBTRACT-DURATION et FIND-DURATION si tu les as dans ton compilo. Il y a toute une batterie de fonctions et d'API qui peuvent t'aider. Regarde les discussions post-it plus haut : - http://www.developpez.net/forums/d64...obol-for-z-os/ - http://www.developpez.net/forums/d61...ues-ile-cobol/ Cependant en restant sur ton exemple, je pense qu'il faudrait redéfinir toute la structure comme tu l'as fait mais en supprimant les VALUE dans le REDEFINES (ce n'est pas autorisé). Même les VALUE dans l'objet du REDEFINES ne doivent pas tellement servir, je pense qu'ils doivent être écrasés par les séparateurs de la variable type DATE au moment du transfert. Code :
|
||
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() ![]() François DurandSpécialiste Delivery Mainframe IBM Inscription : octobre 2005 Messages : 1 096 ![]() |
|
|
|
00
|
|
|
#4 | |||||
|
Invité régulier
![]() Inscription : novembre 2006 Messages : 19 ![]() |
Cobol
* Micro Focus SQL External Compiler Module for IBM DB2 UDB * Version 4.0.05 (C) copyright 1997-2008 Micro Focus (IP) Ltd. DB2 DB2 v9.5 ------------------- Sinon ça a l'air de fonctionner en enlevant le "value" du redefine. Je peux effectivement faire mes calculs avec les valeurs "redéfinies" comme numérique. Avant de marquer la discussion comme résolue... Là, j'essaie de soustraire deux dates ensemble et j'ai une erreur de compile : "Invalid FUNCTION name FIND-DURATION" Le traitement Code :
Code :
Citation:
Merci |
|||||
|
|
00
|
|
|
#5 | ||
|
Membre Expert
![]() ![]() |
Bonjour.
Je ne connais pas tes compilateurs, mais tu ne peux pas utiliser les fonctions intrinsèques des dates sur des données qui ne sont pas de type date. Il faut les convertir, exemple sur ILE Cobol for Iseries : Code :
|
||
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Inscription : novembre 2006 Messages : 19 ![]() |
Après avoir vérifier (avoir trouvé ma version et la doc surtout) dans la doc, j'ai vu que cette fonction n'est pas présente pour MF Server Express V5.1.
Je vais donc utiliser les fonctions NUMVAL, INTEGER-OF-DATE et DATE-OF-INTEGER. Pour info, le typage en "date" n'est pas non plus admis. Je vais faire quelques tests et je vous revient avec la solution concrète. |
|
|
00
|
|
|
#7 | |
|
Membre Expert
![]() ![]() François DurandSpécialiste Delivery Mainframe IBM Inscription : octobre 2005 Messages : 1 096 ![]() |
Citation:
1) INTEGER-OF-DATE convertit en entier une date 2) opération arithmétique sur les entiers ainsi convertis 3) DATE-OF-INTERGER convertit en date un entier Par contre, je ne pense pas que tu aies besoin de NUMVAL. |
|
|
|
00
|
|
|
#8 |
|
Membre chevronné
![]() Administrateur de base de données Inscription : octobre 2006 Messages : 503 ![]() |
Bonjour
As-tu essayer de faire faire le travail par SQL? Pour un calcul de date, c'est plus simple que de coder soit même. Il existe pas mal de fonctions intégrées permettant divers calcul. Pour des transformations de CHAR en NUM, tu laisses de coté les particularité de ton cobol. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com