(sans sujet)

IBM i, configuration, commandes, ...
Répondre
Athalaric44
Messages : 21
Enregistré le : ven. 22 juil. 2016, 13:54:28

(sans sujet)

Message par Athalaric44 »

Bonjour,

nous rencontrons une anomalie IBM i lors d'un calcul de date.

L'opération SQL suivante :
values date('0300-02-01') + 1 month
retourne la valeur '0300-02-29'
Nous avons le même résultat en RPG ( '0300-02-01' + %month(1) )

or l'an 300 n'est pas bisse xtile.

Le plus étrange est que l'opération SQL :
values date('0300-02-29')
retourne un anomalie...
Idem en RPG, un simple test IF sur la date calculée fait planter le pgm...

Vrai bug à signaler à IBM ?
Modifié en dernier par Athalaric44 le jeu. 09 mai 2019, 14:45:24, modifié 1 fois.

Athalaric44
Messages : 21
Enregistré le : ven. 22 juil. 2016, 13:54:28

(sans sujet)

Message par Athalaric44 »

Dans le même genre :

values date('0300-02-01') + 28 days ==> 0300-02-29

alors que

values date('0300-02-01') + 29 days ==> 0300-03-02

mgris
Messages : 3
Enregistré le : jeu. 04 oct. 2018, 13:23:57
Contact :

(sans sujet)

Message par mgris »

Bonjour
En fait c'est le 1er mars 300 qui n'existe pas, c'est ce qui explique vos résultats

values date('0300-03-01') retourne 0300-02-29

On considère en général que les dates avant le début du calendrier grégorien ne sont pas valide.
Mais le système accepte les années entre l'an 1 et l'an 9999 comme valables pour les calculs.
Extrait de Db2 for i SQL Reference sur les dates
Date
A date is a three-part value (year, month, and day) designating a point in time
under the Gregorian calendar, which is assumed to have been in effect from the
year 1 A.D.
The range of the year part is 0001 to 9999.24 The date formats *JUL, *MDY, *DMY,
and *YMD can only represent dates in the range 1940 through 2039. The range of
the month part is 1 to 12. The range of the day part is 1 to x, where x is 28, 29, 30,
or 31, depending on the month and year.
The internal representation of a date is a string of 4 bytes that contains an integer.
The integer (called the Scaliger number) represents the date.
The length of a DATE column as described in the SQLDA is 6, 8, or 10 bytes,
depending on which format is used. These are the appropriate lengths for string
representations for the value.

Athalaric44
Messages : 21
Enregistré le : ven. 22 juil. 2016, 13:54:28

(sans sujet)

Message par Athalaric44 »

Merci pour cette réponse détaillée.
On va tâcher d’éviter les dates trop anciennes... :D

Répondre