Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#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
Julien.
https://rjuju.github.io/
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.
Julien.
https://rjuju.github.io/
Hors ligne
#5 14/06/2017 23:06:29
- meles
- Membre
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.
un peu comme dans sed !
ravi de la question, je découvre aussi !
@+
Hors ligne