Convertir quelques données en 0

Résolu
andyajram Messages postés 155 Date d'inscription vendredi 24 mai 2013 Statut Membre Dernière intervention 8 avril 2020 - 26 févr. 2019 à 16:06
andyajram Messages postés 155 Date d'inscription vendredi 24 mai 2013 Statut Membre Dernière intervention 8 avril 2020 - 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

1 réponse

jordane45 Messages postés 38219 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 8 juillet 2024 344
26 févr. 2019 à 19:30
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 155 Date d'inscription vendredi 24 mai 2013 Statut Membre Dernière intervention 8 avril 2020 1
27 févr. 2019 à 08:46
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.
0
andyajram Messages postés 155 Date d'inscription vendredi 24 mai 2013 Statut Membre Dernière intervention 8 avril 2020 1
27 févr. 2019 à 10:14
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 ??
0
jordane45 Messages postés 38219 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 8 juillet 2024 344 > andyajram Messages postés 155 Date d'inscription vendredi 24 mai 2013 Statut Membre Dernière intervention 8 avril 2020
27 févr. 2019 à 19:58
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.... )
0
andyajram Messages postés 155 Date d'inscription vendredi 24 mai 2013 Statut Membre Dernière intervention 8 avril 2020 1
28 févr. 2019 à 08:59
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
0
Rejoignez-nous