Bonjour,
j'ai besoin d'une fonction qui retourne le nombre d'occurrence d'une sous chaine dans une autre chaine de caractères
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT (LENGTH('abcdefabcdabcdef') - NVL(LENGTH(REPLACE('abcdefabcdabcdef', 'abc')),0)) / LENGTH('abc') AS nb_occurences FROM dual
REGEXP_COUNT
par exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 select regexp_count('MISSISSIPI','SI') from dual; REGEXP_COUNT ------------ 2
Bonjour et merci pour cette fonction !![]()
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT ( length ('MISSISSIPI') - nvl (length (replace ('MISSISSIPI', 'SI')), 0) ) / length ('SI') AS nb_occurrences FROM dual;
Elle fonctionne nickel.
Partager