SQL Oracle 如何找到不同的单词而不是断章取义的单词?

问题描述 投票:0回答:1

我有一个表,其中名为“NOT”的列包含一些文本。我试图仅返回包含“ABC”的行,而不返回包含“ABCD”、“ZABC”等的行。

我在想类似的事情

select * from MY_TABLE where NOTE like '%ABC%' and NOTE not like '%ABCD%'

您认为这是最可选的解决方案吗?或者,如果我只搜索 ABC,是否有更好的方法来消除不需要的行?我正在努力寻找更好的方法来表达我的问题,因此感谢这里的任何帮助。

sql oracle search where-clause
1个回答
0
投票

您可以使用 Oracle Text 使用

CONTAINS
进行搜索。

如果您有样本数据:

CREATE TABLE my_table ( note ) AS
SELECT 'ABC is what we are looking for' FROM DUAL UNION ALL
SELECT 'We are not looking for ABCD.' FROM DUAL UNION ALL
SELECT 'and ZABC does not match either.' FROM DUAL UNION ALL
SELECT 'We want ABC and not ABCD or ZABC, but if they are together...' FROM DUAL;

然后您可以创建 Oracle Text 索引:

CREATE INDEX my_table__note__textidx ON my_table(note) INDEXTYPE IS CTXSYS.CONTEXT;

并使用查询:

SELECT *
FROM   my_table
WHERE  CONTAINS(note, 'ABC') > 0

哪个输出:

注意
ABC就是我们要找的
我们想要 ABC 而不是 ABCD 或 ZABC,但如果它们在一起......

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.