Compter les occurrences de caractère dans une chaîne en utilisant MySQL
Exemple de mots: a, akkka, akokaa, kokoko, kakao, oooaooa, kkako, kakaoa
J'ai besoin de la sorcière regexp donne des mots avec 2 ou moins ' a 'mais pas les mots sans' a '
Résultat: un, akka, kakao, oooaooa, kkako
Ok en fait, j'utilise:
SELECT word FROM dictionary_gr WHERE word REGEXP 'λ{2,3}' LIMIT 0 , 30
Cela renvoie 0 lignes il y a des mots avec 2 λ et 3 λ
3 réponses
select *
from table
where LENGTH(name) - LENGTH(REPLACE(name, 'a', '')) between 1 and 2
Mis à jour pour utiliser entre.
Je ne sais pas ce que MySQL supporte en termes d'assertions lookaround, mais ce qui suit fera l'affaire:
^(?=.*a.*a?.*)(?!.*a.*a.*a.*).*$
, Nous avons une anticipation affirmation qui correspond à 1 ou 2 a
caractères dans la chaîne. Ensuite, nous avons un lookahead négatif qui ignore 3 ou plus a
s n'importe où dans la chaîne. Ensuite, le motif final correspond simplement à la chaîne entière, à condition que les deux premières assertions soient satisfaites.
Si MySQL ne supporte pas les lookarounds, alors la réponse de @Woot4Moo serait le chemin aller.
Rapide et sale:
Select word, number_of_as From
(
Select 'akkka' word, REGEXP_COUNT('akkka', 'a') number_of_as From dual
)
Where number_of_as <= 2
/