Как разрешить поиск, используя CONTAINS для «B & B», не получая подсказку «Ввести переменную замещения» из-за & и получить только «B & B» - PullRequest
0 голосов
/ 25 апреля 2019

Я выполняю поиск CLOB с глобальным индексированием, чтобы я мог использовать функцию CONTAINS.Я ищу фразу «B & B».Я пробовал несколько способов избежать &, поэтому он не будет рассматриваться как приглашение для ввода данных пользователем.Я не могу этого сделать.

select * from table where contains(txt, '({B&B})')>0;--this gives me substitution variable prompt

select * from table where contains(txt, '({B}{&}{B})')>0;--this finds 'B B'

select * from table where contains(txt, '(B{&}B)')>0;--this finds 'B B'

select * from table where contains(txt, '({B&B})')>0;--this gives me substitution variable prompt

select * from table where contains(txt, '({B&}B)')>0;--this finds 'B B', 'B.B', 'B&B'

select * from table where contains(txt,'NEAR (({B&},(B)),1)') > 0;--this finds 'B B', 'B.B', 'B&B'

select * from table where txt like '%B&B%';--this gives me substitution variable prompt

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

Мне нужно игнорировать все вхождения«B B», «BB» и возвращают только те строки, которые имеют «B & B» в этом поле.

1 Ответ

1 голос
/ 26 апреля 2019

Я знаю, это CLOB. В любом случае INSTR принесет пользу?

SQL> create table test (txt clob);

Table created.

SQL> set define off
SQL> insert into test
  2    select 'This is an example which does not contain BB, B B, B.B' from dual union all
  3    select 'Query should return B&B because it is here' from dual;

2 rows created.

SQL> select txt
  2  from test
  3  where instr(txt, 'B&B') > 0;

TXT
--------------------------------------------------------------------------------
Query should return B&B because it is here

SQL>
...