Mysql
 sql >> Database >  >> RDS >> Mysql

Come trovare le parole ripetute di una cella in SQL

Se vuoi codificarlo:

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

Aggiornamento: Ecco un approccio leggermente meno codificato:

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

Cercherà fino alle prime 10 parole o giù di lì e non gestisce correttamente maiuscole e minuscole, segni di punteggiatura o più spazi, ma dovrebbe darti un'idea di un approccio che puoi adottare. Se vuoi che gestisca stringhe più lunghe, continua ad aggiungere alle istruzioni UNION ALL.