Vous n'êtes pas identifié(e).

#1 14/06/2017 10:06:24

castanet31
Membre

recherche nombre occurence d'une sous chaine dans une chaine de caract

bonjour,

je cherche une solution de requête ( qui parait simple à priori) mais je n'arrive à concrétiser .
je cherche a compter le nombre d'occurrence d'une sous chaine dans un champs texte

le champs  [sequence] de la table contient des chaines du style : "tour_blet_tour_blet_tour_blet_tour_blet_tour"
et je voudras pouvoir compter ( par enregistrement ( ligne de la table)   le nombre d’occurrence 'tour' dans la chaine précédente.

après plusieurs exploration avec la commande regexp_matches qui me retrouve bien la  sous chaine 'tour' ;

puis j'ai exploré la fonction de recherche plein text ;
j'arrive a récupérer les positions de la sous chaine 'tour'

select id_ilot,sequence , to_tsvector ( "sequence" ) :: tsvector
from rpg.sequencesclasseestournesol_fr_06_14
where id_ilot = '001-10923'

me donne :
id_ilot     sequence        to_tsvector
"001-10923";"mais_mais_prairiet_blet_mais_tour_mais_mais_tour";"'blet':4 'prairiet':3 'tour':6,9"
"001-10923";"mais_mais_tour_blet_mais_tour_mais_mais_tour";"'blet':4 'tour':3,6,9"

la je me dit que je suis pas loin du but ...
il me  faudrait juste trouver la bonne requete pour  pouvoir extraire ces occurrences   pour chaque ligne (id_ilot)

c'est là que je sollicite votre aide car je me dit   je me suis peut être égaré avec les tsvector ... ?

merci par avance

Hors ligne

#2 14/06/2017 10:28:54

rjuju
Administrateur

Re : recherche nombre occurence d'une sous chaine dans une chaine de caract

Pourquoi pas quelque chose comme

SELECT id_ilot, count(*) FROM (
    SELECT id_ilot, regexp_matched(sequence, 'tour', 'g')
    FROM rpg.sequencesclasseestournesol_fr_06_14
) s
GROUP BY s.id_ilot

Hors ligne

#3 14/06/2017 11:08:47

castanet31
Membre

Re : recherche nombre occurence d'une sous chaine dans une chaine de caract

super !
c'est exactement le résultat que je cherchais à obtenir
merci beaucoup

par curiosité 'sql' ,  à quoi correspond le paramètre 'g' dans la commande regexp_matches ?

regexp_matches(sequence, 'tour', 'g')

bonne journée

Hors ligne

#4 14/06/2017 11:15:23

rjuju
Administrateur

Re : recherche nombre occurence d'une sous chaine dans une chaine de caract

Ce n'est pas lié au SQL, c'est pour spécifier le flag "global" à la recherche regexp, c'est-à-dire ne pas s'arrêter à la première occurence trouvée.

Hors ligne

#5 14/06/2017 23:06:29

meles
Membre

Re : recherche nombre occurence d'une sous chaine dans une chaine de caract

rjuju a écrit :

Ce n'est pas lié au SQL, c'est pour spécifier le flag "global" à la recherche regexp, c'est-à-dire ne pas s'arrêter à la première occurence trouvée.

un peu comme dans sed ! big_smile

ravi de la question, je découvre aussi !

@+

Hors ligne

Pied de page des forums