日期:2014-05-17  浏览次数:21838 次

oracle 11g 有 CONTAINS 这个函数吗?
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'beijing' )
我调试时,报错:无效的关系运算符。

但是我在网上查询是有这个函数啊。谢谢。

------解决方案--------------------
SQL code

SELECT student_id,student_name
FROM students
WHERE instr( address, 'beijing' )>0

------解决方案--------------------
探讨
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'beijing' ) >0

------解决方案--------------------
这个是全文检索用的,你可以参考一下这个文档
------解决方案--------------------
CONTAINS谓词
该函数是一个谓词,用于搜索包含基于字符的数据类型的列,该列与单个词和短语,以及与另一个词在一定范围之内的近似词精确、模糊(不太精确的)或者加权匹配。CONTAINS可以搜索如下词语:
(1)词或短语。
(2)词或短语的前缀。
(3)另一个词附近的词。
(4)由另一个词的词尾变化生成的词(例如,词drive是drives、drove、driving和driven词尾变化的词干)。
(5)比另一个词具有更高加权的词。
语法:
CONTAINS
( { column | * } , '< contains_search_condition >'
)
< contains_search_condition > ::=
{ < simple_term >
| < prefix_term >
| < generation_term >
| < proximity_term >
| < weighted_term >
}
| { ( < contains_search_condition > )
{ AND | AND NOT | OR } < contains_search_condition > [ ...n ]
}
< simple_term > ::=
word | " phrase "
< prefix term> ::=
{ "word * " | "phrase * " }
< generation_term > ::=
FORMSOF ( INFLECTIONAL , < simple_term > [ ,...n ] )
< proximity_term > ::=
{ < simple_term > | < prefix_term > }
{ { NEAR | ~ } { < simple_term > | < prefix_term > } } [ ...n ]
< weighted_term > ::=
ISABOUT
( { {
<simple_term>
| < prefix_term >
| < generation_term >
| < proximity_term >
}
[ WEIGHT ( weight_value ) ]
} [ ,...n ]
)
参数说明:
column:已经注册全文检索的特定列的名称。字符串数据类型的列是有效的全文检索列。
<contains_search_condition>:指定要在列中搜索的文本。变量不能用作搜索条件。
word:没有空格或标点符号的字符串。
phrase:在每个词之间带有空格的一个或多个词。
该函数只能在WHERE子句中使用。其括号内参数会传递给Microsoft搜索服务,而Microsoft搜索服务则会返回符合指定条件的主键列表。
注意:该函数只能用于已创建全文索引的数据表,并启动完全填充。对数据表中的数据进行修改后,应重新启动完全填充,否则将检索上一次启动完全填充的数据。
下面分别介绍一下该函数的几种用法。
(1)使用带有<simple_term>的CONTAINS函数
搜索“MR_QWSY”表中工作单位含“海风”且年龄为22的人员姓名。
USE MR_SQL
GO
SELECT QW_name FROM MR_QWSY WHERE QW_age=22 AND CONTAINS(QW_working,'海风')
运行结果如图1所示。

图1 搜索工作单位含“海风”的人员姓名
(2)在<simple_term>中使用CONTAINS和短语
搜索“MR_QWSY”表中工作单位含“林”或“业”的人员姓名。
USE MR_SQL
GO
SELECT QW_name FROM MR_QWSY WHERE CONTAINS(QW_working,'“林” or "业"')
运行结果如图2所示。

图2 搜索工作单位含“林”或“业”的人员姓名
(3)使用带有<prefix_term>的CONTAINS
搜索“MR_QWSY”表中工作单位包含“集”的人员名称。
USE MR_SQL
GO
SELECT QW_name FROM MR_QWSY WHERE CONTAINS(QW_working,'"集*"') 
运行结果如图3所示。

图3 搜索工作单位包含“集”的人员名称
(4)使用带有<proximity_term>的CONTAINS
搜索工作单位中“林”词附近有“业”词的人员名称。
USE MR_SQL
GO
SELECT QW_name FROM MR_QWSY WHERE CONTAINS(QW_working,'林 NEAR业')
运行结果如图4所示。

图4 搜索工作单位中“林”词附近有“业”词的人员名称
(5)使用带有<generation_term>的CONTAINS
搜索备注信息中有“dry”形式的词的人员名称。其“dry”形式有“dried”和“drying”等。
USE MR_SQL
GO
SELECT QW_name FROM MR_QWSY WHERE CONTAINS(QW_mome,'FORMSOF(INFLECTIONAL,dry)')
运行结果如图5所示。

图5 搜索备注信息中有“dry”形式的词的人员名称
(6)使用带变量的CONTAINS
用变量搜索“MR_QWSY”表中指定单位的人员名称。
USE MR_SQL
GO
DECLARE @Word varchar(30)
SET @Word ='林林奶业'
SELECT QW_name FROM MR_QWSY WHERE CONTAINS(QW_working,@Word)
运行结果如图6所示。

图6 用变量搜索指定单位的人员名称