запрос на возврат всех записей, которые имеют повторяющуюся строку / номер - PullRequest
4 голосов
/ 15 апреля 2020

Я ищу помощь в поиске записей, в которых есть повторяющаяся строка / номер в атрибуте из-за неправильного управления вводом. Например, таблица будет выглядеть примерно так:

ID|stuff
1 | 23 jackson jackson st
2 | 89 jackson st
3 | 1 1 jackson st
4 | 66 jackson st

Я хочу, чтобы возврат выглядел следующим образом:

ID|stuff
1 | 23 jackson jackson st
3 | 1 1 jackson st

Обратите внимание, в приведенном выше примере, 's' не заставляет его возвращаться в id 2, даже если он присутствует и в jackSon, и в St.

Любая помощь будет принята с благодарностью, спасибо.

Ответы [ 2 ]

3 голосов
/ 15 апреля 2020

Вы можете использовать обратные ссылки в Oracle регулярных выражениях. Я думаю , это делает то, что вы хотите:

select *
from t
where regexp_like(' ' || stuff, ' ([^ ]+) .*\1');

Здесь - это дб <> скрипка.

0 голосов
/ 15 апреля 2020

Используйте этот WHERE предикат

where regexp_like(stuff, '(^|\W)(\w+)($|\W).*\2')

Обратите внимание, что начальная и начальная группы (^|\W) и ($|\W) означают начало / конец строки или , не являющийся символом слова Разграничит вторую группу - первый экземпляр дублированного слова.

Вторая группа определяется как (\w+) один или несколько словосочетаний .

Вы можете альтернативно использовать \s (пробел) вместо \W - см. здесь для получения дополнительной информации.

Здесь примеры данных, возвращаемых этим регулярным выражением, также относятся к разделителям, не содержащим слов.

Вы также не должны недооценивать вкладки и другие мелочи, которые простое решение игнорирует .

23 jackson jackson st
1 1 jackson st
68 jackson.st.jackson

См. также этот ответ с похожим топи c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...