Nous avons une table avec une colonne varchar2(100)
, qui contient parfois des retours à la ligne &. Nous aimerions supprimer ces caractères dans la requête SQL. Nous utilisons:La fonction Oracle REPLACE() ne gère pas les retours chariot et les sauts de ligne
REPLACE(col_name, CHR(10))
qui a aucun effet, en remplaçant toutefois le caractère « CHR (10) » pour une « lettre » plus classique prouve que la fonction fonctionne REMPLACER autrement. Nous avons également constaté que
REPLACE(col_name, CHR(10), '_')
trouve l'emplacement de la nouvelle ligne, mais inserts le trait de soulignement après, plutôt que de le remplacer.
En cours d'exécution sur Oracle8i. La mise à niveau n'est pas une option.
Pourriez-vous élaborer sur la partie «x» du code? Je ne suis pas. Je comprends que vous devez spécifier un remplacement, mais pourquoi devez-vous inclure le remplacement au début du deuxième argument? –
Si vous écrivez 'TRANSLATE (nom_colonne, CHR (10) || CHR (13), null)' alors cela ne fonctionnera pas - il retournera toujours NULL (une anomalie de manipulation nulle). Si vous écrivez 'TRANSLATE (nom_col, CHR (10) || CHR (13), 'x')' alors il convertira chaque CHR (10) en 'x', ce qui n'est pas ce que l'on veut. Si nous préfixons les deux arguments avec un 'x', alors il traduira 'x' en 'x' et CHR (10), CHR (13) en null, donnant le résultat désiré. –
Gotcha, c'est ce que signifie cette partie de la référence 'Dans ce cas, les caractères supplémentaires à la fin de from_string n'ont aucun caractère correspondant dans to_string. Si ces caractères supplémentaires apparaissent dans char, ils sont supprimés de la valeur de retour. Merci! –