Как узнать положение слова при нахождении в тексте в Oracle? - PullRequest
0 голосов
/ 01 октября 2019

В таблице есть слово и предложения. Если слово найдено, как его найти? Ниже temp.word имеет информационную безопасность и информацию как. Для id = 100 я ожидаю увидеть информацию, когда она появится во второй раз (для получения дополнительной информации), поскольку у нас есть информационная безопасность в temp.word. Итак, нам нужно пропустить Информационную безопасность. Код ниже выбирает информацию, которая появляется первой.

Create table temp(
  id       NUMBER,
  word     VARCHAR2(1000),
  Sentence VARCHAR2(2000)
);

insert into temp 
select 100,'Information Security','Information security, sometimes shortened to infosec. For more information, visit https://infosec.com' FROM DUAL UNION ALL
select 200,'Information','Information-security information.' FROM DUAL UNION ALL
select 300,'Info','https://infosec.com Information Security' FROM DUAL;

select word,sentence, regexp_instr(sentence,word,1, 1, 0,'i') as token
from temp
where instr(UPPER(sentence), UPPER('information')) > 0
and regexp_like(sentence,'information','i')

1 Ответ

1 голос
/ 01 октября 2019

Для поиска второго появления вы можете использовать regexp_substr.

Синтаксис для него выглядит следующим образом:

REGEXP_INSTR (string, pattern [, start_position [, nth_appearance [,return_option [, match_parameter [, sub_expression]]]]])

В вашем случае используйте 2 в качестве nth_appearance как следующее

regexp_instr(sentence,word,1, 2, 0,'i') as token

Db <> fiddleдемо

ура !!

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