42 votes

Comment compter le nombre d'occurrences d'un caractère dans une valeur Oracle varchar ?

Comment puis-je compter le nombre d'occurrences du caractère - dans une chaîne varchar2 ?

Exemple:

 select XXX('123-345-566', '-') from dual;
----------------------------------------
2

73voto

Flukey Points 3722

Voici:

 select length('123-345-566') - length(replace('123-345-566','-',null)) 
from dual;

Techniquement, si la chaîne que vous souhaitez vérifier ne contient que le caractère que vous souhaitez compter, la requête ci-dessus renverra NULL ; la requête suivante donnera la bonne réponse dans tous les cas :

 select coalesce(length('123-345-566') - length(replace('123-345-566','-',null)), length('123-345-566'), 0) 
from dual;

Le 0 final dans coalesce attrape le cas où vous comptez dans une chaîne vide (c'est-à-dire NULL, car length(NULL) = NULL dans ORACLE).

71voto

Borodin Points 52478

REGEXP_COUNT devrait faire l'affaire :

 select REGEXP_COUNT('123-345-566', '-') from dual;

11voto

bpgergo Points 9407

Voici une idée : essayez de remplacer tout ce qui n'est pas un tiret par une chaîne vide. Comptez ensuite le nombre de tirets restants.

 select length(regexp_replace('123-345-566', '[^-]', '')) from dual

3voto

Hugh Jones Points 1444

j'ai pensé à

  SELECT LENGTH('123-345-566') - LENGTH(REPLACE('123-345-566', '-', '')) FROM DUAL;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X