Bonjour,
Je me sens vraiment pas doué puisque je souhaite simplement découper une chaine séparée par des espaces.
Par exemple : chaine= "je ne suis pas doué"
résultat :
je
ne
suis
pas
doué
Version imprimable
Bonjour,
Je me sens vraiment pas doué puisque je souhaite simplement découper une chaine séparée par des espaces.
Par exemple : chaine= "je ne suis pas doué"
résultat :
je
ne
suis
pas
doué
Vous n'avez pas à être gêné puisque la réponse n'est pas si simple.
Par contre, une petite recherche dans le forum Oracle sur le mot "découper" vous indiquera pas mal de sujets traitant ce problème.
J'ai trouvé un post qui traite d'un problème similaire :
http://www.developpez.net/forums/d1099852/bases-donnees/oracle/sql/oracle-split-varchar/
Edit : ce qui donnerais dans ce cas :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 WITH t AS ( SELECT 'je ne suis pas doué' AS c FROM dual ) SELECT x.column_value AS list_mot FROM t CROSS JOIN TABLE( cast(multiset( SELECT substr( ' '||c||' ', instr( ' '||c||' ', ' ', 1, rownum )+1, instr( ' '||c||' ', ' ', 1, rownum+1 ) -instr( ' '||c||' ', ' ', 1, rownum )-1 ) FROM dual connect BY level <= length(c)-length(REPLACE(c,' ',''))+1 ) AS sys.odcivarchar2list ) ) x;
Code:
1
2
3
4
5
6
7
8
9
10 LIST_MOT ------------------------------------------------------------------------- je ne suis pas doué 5 rows selected.
:zoubi:Code:
1
2
3 select regexp_substr(str, '[a-z]* ',1,lvl) from (select 'je ne suis pas doué ' str from dual) t, (select level lvl from dual connect by level <10);
"un marteau pour enfoncer le clou, un tournevis pour visser une vis, pas l'inverse, c'est la rançon du succès" (citation de moi-même)
j'ai optimisé l'essence de ma pensée cartésienne cette nuit...
Je f'rai pas mieux :cry:Code:
1
2 SELECT regexp_substr('je ne suis pas doué ', '[a-z]* ',1,level) FROM dual connect BY level <10;
Mais si, ce level < 10 ce n'est pas très joli.
Dans les liens précédemment fournis il y a de quoi compter les espaces afin de rafiner la requête.
slt Waldar
c'est que t'es pointilleux là :ccool:
Comme cela il n'y a plus de lignes vides...Code:
1
2
3 select regexp_substr('je ne suis pas doué ', '[a-z]* ',1,level) as token from dual CONNECT by level <length(regexp_replace('je ne suis pas doué', '[a-z]*',''))+2;
et j'ai supprimé l'espace que j'avais rajouté en fin de chaine
a+