Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment trouver les mots répétés d'une cellule en SQL

Si vous voulez le coder en dur :

select EntityID, Situation
from Entity
where Situation like '%the the%'
or Situation like '%of of%'
or Situation like '%is is%'

Mise à jour : Voici une approche un peu moins codée en dur :

select EntityID, Situation, right(s2, diff * 2 + 1) as RepeatedWords
from (
    select EntityID, Situation, WordNumber,
        substring_index(Situation, ' ', WordNumber) s1,
        substring_index(Situation, ' ', WordNumber + 1) s2,
        length(substring_index(Situation, ' ', WordNumber + 1)) - length(substring_index(Situation, ' ', WordNumber)) -1 diff
    from `Entity` e
    inner join (
        select 1 as WordNumber
        union all
        select 2 
        union all
        select 3 
        union all
        select 4 
        union all
        select 5 
        union all
        select 6 
        union all
        select 7 
        union all
        select 8 
        union all
        select 9 
        union all
        select 10 
    ) n
) a
where right(s1, diff) = right(s2, diff)
    and diff > 0
order by EntityID, WordNumber

Il recherchera jusqu'aux 10 premiers mots environ et ne gère pas correctement la casse, la ponctuation ou les espaces multiples, mais cela devrait vous donner une idée de l'approche que vous pouvez adopter. Si vous voulez qu'il gère des chaînes plus longues, continuez simplement à ajouter aux instructions UNION ALL.