Convertir quelques données en 0 [Résolu]

Messages postés
145
Date d'inscription
vendredi 24 mai 2013
Statut
Membre
Dernière intervention
16 août 2019
- - Dernière réponse : andyajram
Messages postés
145
Date d'inscription
vendredi 24 mai 2013
Statut
Membre
Dernière intervention
16 août 2019
- 28 févr. 2019 à 08:59
Bonjour tout le monde,

je sollicite votre aide pour faire marcher une requête , je veux convertir les données à partir d'un champ de type varchar2 pour les insérer dans un champ numérique qui sont sous forme de :
0.02
0.02
0.03
0.03
0.03
0.03
0.037
normalement j'utilise la fonction to_number(REPLACE(R_TEXT, '.' , ',' ))
mais cette fonction ne marche plus , j'ai le message Nombre non valide parce que quand j'ai vérifié sur la base de données j'ai trouvé qu'il ya des données sous la forme :
Ca ( S O4 )*** ; Ca ( S O4 ) ( H2 O )2*; Si O2*
Ca ( S O4 )*** ; Ca ( S O4 ) ( H2 O )2*; Si O2*
Ca ( S O4 )*** ; Ca ( S O4 ) ( H2 O )2*; Si O2*
Ca ( S O4 )*** ; Ca ( S O4 ) ( H2 O )2*; Si O2*
Ca ( S O4 )*** ; Ca ( S O4 ) ( H2 O )2*; Si O2*
Ca ( S O4 )*** ; Ca ( S O4 ) ( H2 O )2*; Si O2*
Ca ( S O4 )*** ; Ca ( S O4 ) ( H2 O )2*; Si O2*
Ca S O4 !2 H2 O*** ; Si O2*** ; Al2 ( Al2.8 Si1.2 ) O9.6** ; Ca S O4 !0.5 H2 O*; Ca C O3*
Ca S O4 !2 H2 O*** ; Si O2*** ; Al2 ( Al2.8 Si1.2 ) O9.6** ; Ca S O4 !0.5 H2 O*; Ca C O3*
Ca S O4 !2 H2 O*** ; Si O2*** ; Al2 ( Al2.8 Si1.2 ) O9.6** ; Ca S O4 !0.5 H2 O*; Ca C O3*
je voudrai savoir est-ce-qu'il y'a un moyen de ne pas prendre en compte ces données lors du chargement ou bien ils peuvent être transformées en 0 par exemple ???

Merci d'avance
Afficher la suite 

1 réponse

Messages postés
26137
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 août 2019
314
0
Merci
Bonjour

tu dois pouvoir utiliser une regex pour extraire les lignes qui ne correspondent pas à des chiffres (avec point ou virgule).
De là, tu pourras faire une requête d'update sur ces lignes pour les mettre à 0
andyajram
Messages postés
145
Date d'inscription
vendredi 24 mai 2013
Statut
Membre
Dernière intervention
16 août 2019
-
Bonjour, quand je fais ça : select REGEXP_REPLACE(R_TEXT, '[^0-9A-Za-z]', '0') from ma table order by R_TEXT ,
ca me donne : Ca000S0O400000000Ca000S0O400000H20O002000Si0O20
mais ensuite je ne sais pas comment eliminer la ligne vue que je ne peux faire que des selects sur cette table je ne peux pas la modifier avec update parceque je ne fais que lire d'une vue qui est en production.
andyajram
Messages postés
145
Date d'inscription
vendredi 24 mai 2013
Statut
Membre
Dernière intervention
16 août 2019
-
j'ai fais ça ensuite :
select to_number(REPLACE(R, '.' , ',' )) from (
select REGEXP_REPLACE(R_TEXT, '[^0-9A-Za-z]', '0') as R from ma_table
where R_TEXT not like 'C%' ) order by R
mais ça enlève aussi les chiffres de mes données et ça ne met pas de virgule , comment je peux faire ??
jordane45
Messages postés
26137
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 août 2019
314 > andyajram
Messages postés
145
Date d'inscription
vendredi 24 mai 2013
Statut
Membre
Dernière intervention
16 août 2019
-
As tu testé ta regex ??
Il faut trouver celle qui correspond à tes besoins...
Un truc du genre :
^([Ca-zA-Z*\\\*;\W].*)


Mais bon.. si toutes les cellules qui te posent problème commencent par la lettre C ...
ceci suffirait :

SELECT to_number(REPLACE(R_TEXT, '.' , ',' ))
FROM ma_table
WHERE R_TEXT  NOT LIKE 'C%'

Ainsi tu ne prends que les cellules pour lesquelles tu peux faire la transformation...(vu que tu veux éliminer la ligne.... )
andyajram
Messages postés
145
Date d'inscription
vendredi 24 mai 2013
Statut
Membre
Dernière intervention
16 août 2019
-
et soudainement aujourd'hui j'ai trouvé qu'il y'a plus de caractère spéciaux et que l'ancienne formule marche bien , lol , je pense qu'un chargement a due alimenter la table pendant la nuit
Commenter la réponse de jordane45