Bonjour,
j'ai besoin d'une fonction qui retourne le nombre d'occurrence d'une sous chaine dans une autre chaine de caractères
Version imprimable
Bonjour,
j'ai besoin d'une fonction qui retourne le nombre d'occurrence d'une sous chaine dans une autre chaine de caractères
Voici une fonction pour spliter une chaîne de caractère
Le résultat est le suivant:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 create or replace type split_tbl as table of varchar2(32767); / show errors; create or replace function split ( p_list varchar2, p_del varchar2 := ',' ) return split_tbl pipelined is l_idx pls_integer; l_list varchar2(32767) := p_list; AA l_value varchar2(32767); begin loop l_idx := instr(l_list,p_del); if l_idx > 0 then pipe row(substr(l_list,1,l_idx-1)); l_list := substr(l_list,l_idx+length(p_del)); else pipe row(l_list); exit; end if; end loop; return; end split; / show errors;
Adapte cette fonction pour que le return renvoie le nombre d'occurences...Code:
1
2
3
4
5 SQL> select * from table(split('one,two,three')); one two three
Je ne pense pas que c'est ce qu'il veuille.
Le nb d'occurence dans une chaine : On le fait par différence de longueur de chaine en supprimant la sous-chaine.
Code:
1
2
3 SELECT (LENGTH('abcdefabcdabcdef') - NVL(LENGTH(REPLACE('abcdefabcdabcdef', 'abc')),0)) / LENGTH('abc') AS nb_occurences FROM dual
Bonjour et merci pour cette fonction ! :ccool:
Code:
1
2
3
4
5 SELECT ( length ('MISSISSIPI') - nvl (length (replace ('MISSISSIPI', 'SI')), 0) ) / length ('SI') AS nb_occurrences FROM dual;
Elle fonctionne nickel.