Подтвердить что ты не робот

Вывод текста Oracle с фигурными фигурными скобками и подстановочными знаками

Я хочу уклониться от критериев поиска в текстовом запросе Oracle с помощью contains и объединить экранированные критерии с подстановочными знаками, чтобы иметь "дважды усеченные" критерии. (Я знаю, что мои индексы не могут быть настроены для идеальной работы, но это лишнее). Я хочу иметь возможность использовать синтаксис фигурных скобок для лучшей читаемости, но это не сработает. Согласно главному ответу на этот связанный (но не повторяющийся) вопрос, фигурные скобки определяют полные токены. Есть ли способ отключить или обойти это поведение?

Текст Oracle: как очистить ввод пользователей

Я предпочел бы избежать необходимости избегать каждого символа в моих критериях поиска (как в последнем выборе в моем коде) или попытаться найти строку для специальных символов, поскольку зарезервированные слова также считаются "специальными". (Обратите внимание, что у меня нет слов остановки). Ниже приведена моя проблема. (К сожалению, SQLFiddle не поддерживает текст Oracle):

create table MY_TABLE(MY_COL varchar2(20));
insert into MY_TABLE(MY_COL) values ('abc');
insert into MY_TABLE(MY_COL) values ('abcd');
insert into MY_TABLE(MY_COL) values ('abcde');
insert into MY_TABLE(MY_COL) values ('bcd');
insert into MY_TABLE(MY_COL) values ('bcde');

create index FTIX on MY_TABLE (MY_COL)
indextype is CTXSYS.CONTEXT
PARAMETERS ('STOPLIST CTXSYS.EMPTY_STOPLIST SYNC (ON COMMIT)');

select * from MY_TABLE where CONTAINS(MY_COL, '%bcd%') > 0; --expected results
select * from MY_TABLE where CONTAINS(MY_COL, '%{bcd}%') > 0; --no results
select * from MY_TABLE where CONTAINS(MY_COL, '{bcd}') > 0; --returns bcd
select * from MY_TABLE where CONTAINS(MY_COL, '{%bcd%}') > 0; --returns bcd
select * from MY_TABLE where CONTAINS(MY_COL, '%\b\c\d%') > 0; --expected results
4b9b3361

Ответ 1

Как насчет:

select * from MY_TABLE where CONTAINS(MY_COL, regexp_replace('*abc*', '([^*])', '\\\1')) > 0