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 ?
(sans sujet)
-
- Messages : 21
- Enregistré le : ven. 22 juil. 2016, 13:54:28
(sans sujet)
Modifié en dernier par Athalaric44 le jeu. 09 mai 2019, 14:45:24, modifié 1 fois.
-
- Messages : 21
- Enregistré le : ven. 22 juil. 2016, 13:54:28
(sans sujet)
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
values date('0300-02-01') + 28 days ==> 0300-02-29
alors que
values date('0300-02-01') + 29 days ==> 0300-03-02
(sans sujet)
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
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.
-
- Messages : 21
- Enregistré le : ven. 22 juil. 2016, 13:54:28
(sans sujet)
Merci pour cette réponse détaillée.
On va tâcher d’éviter les dates trop anciennes...
On va tâcher d’éviter les dates trop anciennes...