gpt4 book ai didi

sql - 使用花括号和通配符转义 Oracle 文本

转载 作者:行者123 更新时间:2023-12-03 10:30:03 25 4
gpt4 key购买 nike

我希望能够使用 contains 在 Oracle 文本查询中转义搜索条件。并将转义的标准与通配符结合起来,以获得“双重截断”的标准。 (我知道我的索引可能没有设置为理想的性能,但这是多余的)。我希望能够使用大括号语法以获得最佳可读性,但这不起作用。根据此相关(但不重复)问题的最佳答案,花括号定义了完整的标记。有什么方法可以禁用或解决此行为?

Oracle Text: How to sanitize user input

我宁愿避免转义搜索条件中的每个字符(根据我代码中的最后一个选择),或者尝试在字符串中搜索特殊字符,因为保留字也被视为“特殊”。 (请注意,我没有停用词)以下演示了我的问题。 (不幸的是 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

最佳答案

怎么样:

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

关于sql - 使用花括号和通配符转义 Oracle 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30194480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com