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:
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...
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
En effectuant une requête sur une différence, j'obtiens :
Là, je sais que la date est différente...
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
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.
La donnée apparaît :
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');
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é?
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
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
Partager