Bonjour à tous,

J'ai un problème avec le contenu d'une colonne qui contient une date apparemment fausse. Elle s'affiche correctement et n'est pas comparable à elle-même...

Je précise que je suis en version Oracle 10.2.0.4.

Soit les requêtes suivantes depuis une console sql plus:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
select valide_du
from sa_rubrique_emp
where sa_rubriq_id = 172 and
         int_emp_id = 6502;
 
VALIDE_DU
---------
28-NOV-03
 
select to_char(valide_du, 'dd.mm.yyyy')
from sa_rubrique_emp
where sa_rubriq_id = 172 and
         int_emp_id = 6502;
 
TO_CHAR(VA
----------
28.11.0003
 
select valide_du
from sa_rubrique_emp
where valide_du = to_date('28.11.0003', 'dd.mm.yyyy');
 
no rows selected => ???
 
select to_char(valide_du, 'dd.mm.yyyy')
from sa_rubrique_emp
where valide_du < to_date('01.01.1901', 'dd.mm.yyyy');
 
TO_CHAR(VA
----------
28.11.0003
Voici mon problème, je vois bien que la date "28.11.0003" existe par contre en utilisant une clause "WHERE" pour la retrouver, elle "n'existe" apparemment pas...

En effectuant une requête sur une différence, j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
select valide_du - to_date('28.11.0003', 'dd.mm.yyyy')
from sa_rubrique_emp
where sa_rubriq_id = 172 and
         int_emp_id = 6502;
 
VALIDE_DU-TO_DATE('28.11.0003','DD.MM.YYYY')
--------------------------------------------
                                       -2191
Là, je sais que la date est différente...

J'ai bien trouvé un moyen de corriger les données avec la commande ci-dessous et j'aimerais identifier l'origine du problème pour le corriger à la source.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
update sa_rubrique_emp 
set valide_du = to_date(to_char(valide_du, 'dd.mm.yyyy'), 'dd.mm.yyyy')
where valide_du < to_date('01.01.1901', 'dd.mm.yyyy');
La donnée apparaît :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
select to_char(valide_du, 'dd.mm.yyyy')
from sa_rubrique_emp
where valide_du = to_date('28.11.0003', 'dd.mm.yyyy');
 
TO_CHAR(VA
----------
28.11.0003
Est-ce que quelqu'un aurais une idée du problème??? J'imagine bien que la date n'est pas stocké correctement et j'aurais voulu identifier la différence entre les valeurs hexa... Est-ce une bonne idée et si oui comment? Via un export de la table et une analyse avec un outil approprié?

De plus, il semblerait, suite aux échanges avec les dévelopeurs, que la donnée "corrompue" soit inséré via le JDBC, est-ce que cela aurait une influence?

D'avance merci à vous,

Cédric