Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 24/07/2011 14:22:23
- debutant_24
- Membre
Compter le nombre d'apparition d'un caractère dans une chaine
Bonjour !
Je cherche depuis un moment un moyen de compter le nombre d'apparition d'un caractère dans une chaine avec une requête.
Par exemple sur la chaine :
'mais où est donc passée la regex ?'
je cherche le nombre d'apparition du caractère "e", et la requête me retournerai : 4
Si quelqu'un connait la technique pour obtenir ça ...
Merci !
Hors ligne
#2 24/07/2011 15:40:54
- gleu
- Administrateur
Re : Compter le nombre d'apparition d'un caractère dans une chaine
b1=# select length(regexp_replace('mais où est donc passée la regex ?', '[^e]', '', 'g'));
length
--------
4
(1 row)
La fonction regexp_replace permet de remplacer dans le premier argument tout ce qui correspond à la regexp du second argument par la chaîne du troisième argument. Le quatrième argument permet de fournir des options. Du coup, là, on remplace tout ce qui n'est pas égale à e (regexp [^e]) par rien (''). Du coup, on supprime tout ce qui ne correspond pas au caractère recherché. On ne doit pas s'arrêter au premier remplacement d'où l'option 'g'. La chaîne résultante contient donc uniquement la lettre recherchée autant de fois qu'elle apparaît dans la chaîne source. Il ne reste plus qu'à calculer sa longueur avec length().
Guillaume.
Hors ligne
#3 24/07/2011 15:50:58
- debutant_24
- Membre
Re : Compter le nombre d'apparition d'un caractère dans une chaine
le problème, c'est que je ne peux pas me permettre de modifier le texte qu'il y a dans le champs, sinon il ne veut plus rien dire
Hors ligne
#4 24/07/2011 16:05:29
- gleu
- Administrateur
Re : Compter le nombre d'apparition d'un caractère dans une chaine
Ça ne modifie rien dans le champ.
Guillaume.
Hors ligne