Bonjour,
je voulais faire une requête SQL sous Oracle qui me donne la chose suivante :
bonjour ===>/b/o/n/j/o/u/r/
est c'est possible sous Oracle?
Merci.
Version imprimable
Bonjour,
je voulais faire une requête SQL sous Oracle qui me donne la chose suivante :
bonjour ===>/b/o/n/j/o/u/r/
est c'est possible sous Oracle?
Merci.
Salut !
A partir de 10g,
Edit : plus vite que super-modo, mais moins bien lu l'énoncé... pas vu le premier slash :)Code:
1
2
3
4
5
6
7
8 SQL> SELECT regexp_replace('bonjour', '(.)', '\1/') 2 FROM dual 3 / REGEXP_REPLACE -------------- b/o/n/j/o/u/r/
En 10g+ vous avez les expressions régulières :
Edit : grillé par la boule jaune !Code:
1
2
3
4
5
6 select regexp_replace('bonjour', '(.)', '/\1') || '/' as mot from dual; MOT --------------- /b/o/n/j/o/u/r/
Merci pour vos reponses rapides,
la mauvaise nouvelle c'est que je fonctionne sous Oracle 9.2i :(
je ne sais pas est ce qu'il existe une solution sous cette version d'Oracle?
Merci d'avance.
Crée une fonction qui prend en paramètre ta chaîne, itère dessus pour ajouter les /, puis retourne le résultat.
Sinon, si tu veux un truc dégueu et contre performant et en mode bug-using, tu as :
Code:
1
2
3
4
5
6
7
8
9 WITH t AS ( select 'bonjour' msg from dual ) select (select replace(replace(xmlagg(xmlelement("x", '/' || substr(t.msg, level, 1))), '</x>', ''), '<x>', '') from dual connect by level <= length(t.msg)) || '/' from t
Merci pacmann , oui je vois ....je suis victime de la version 9i d'Oracle, je suis pour créer une fonction propre qui gère ça (comme vous l'avez recommendé).
pouvez-vous m'aider à créer cette fonction?
thank's in adavnce.
Quelque chose comme ça :
Ou avec la méthode de Pacmann (légèrement modifiée, au lieu de concaténer le slash j'ai utilisé le replace de la balise ouvrante) :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 CREATE OR REPLACE FUNCTION f_slash_string (p$_input in varchar2) RETURN varchar2 DETERMINISTIC IS v$_string varchar2(100) default '/'; BEGIN FOR i IN 1..length(p$_input) LOOP v$_string := v$_string || substr(p$_input, i , 1) || '/'; END LOOP; RETURN (v$_string); END f_slash_string; / select f_slash_string('bonjour') as slash from dual; SLASH --------------- /b/o/n/j/o/u/r/
Code:
1
2
3
4
5
6
7
8
9
10
11 CREATE OR REPLACE FUNCTION f_slash_string (p$_input in varchar2) RETURN varchar2 DETERMINISTIC IS v$_string varchar2(100); BEGIN SELECT REPLACE(REPLACE(xmlagg(xmlelement("x", substr(p$_input, level, 1))), '</x>', ''), '<x>', '/') || '/' INTO v$_string FROM dual CONNECT BY level <= length(p$_input); RETURN (v$_string); END f_slash_string; /
Merci Waldar,
Votre fonction marche bien.:ccool:
Mon problème est résolu.
Thank's.