Si vous voulez coder en dur il:
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 codée en dur un peu moins:
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 recherche aux 10 premiers mots ou Par conséquent, il ne gère pas correctement les casse, la ponctuation ou les espaces multiples, mais il devrait vous donner une idée de l'approche que vous pouvez adopter. Si vous souhaitez gérer des chaînes plus longues, continuez simplement à ajouter les instructions UNION ALL.
Question intéressante ... –
Je ne pense pas que ce soit possible avec du SQL pur. Peut-être que si vous écrivez une fonction MySQL .... –