CONTAINS 标量函数 (scalar function)

CONTAINS函数使用搜索参数中指定的条件搜索文本搜索索引,并返回是否找到匹配项的结果。

要求 :要使用CONTAINS功能,必须安装并配置文本搜索 Db2 for z/OS® 。 查看 IBM 文本 搜索 Db2 for z/OS 获取更多信息。
阅读语法图跳过可视化语法图CONTAINS(列名,search-argument,常量字符串1)
注意:
  • 1 个字符串常量必须符合搜索参数选项的规则。
搜索参数选项
阅读语法图跳过可视化语法图1QUERYLANGUAGE=RESULTLIMIT=SYNONYM=OFFON
注意:
  • 1 同一条款不得重复使用。

该模式是 SYSIBM。

列名
指定具有要搜索的文本搜索索引的列的限定名称或非限定名称。 列必须存在于语句 FROM 子句中指定的表或视图中,并且该表的列或视图的基础表的列必须具有关联的文本搜索索引。 视图列的底层表达式必须是对底层表列的直接引用或通过另一个嵌套视图的引用。
搜索参数
指定一个表达式,该表达式返回一个包含要搜索的术语的字符串值(LOB除外),且不能全部为空格或空字符串。 字符串的实际长度不得超过4096个Unicode字符。 在值被用来搜索文本搜索索引之前,将首先被转换为 Unicode。 每次查询的词条数量不得超过1024个。
字符串常量
标识一个字符串常量,该常量指定对函数有效的搜索参数选项。

作为搜索参数选项的一部分,可指定的选项如下:

QUERYLANGUAGE =
指定查询语言。 该值可以是任何一种支持的语言代码。 如果未指定QUERYLANGUAGE选项,则默认值为调用此功能时使用的文本搜索索引的语言值。 如果文本搜索索引的语言值为“自动”,则QUERYLANGUAGE的默认值为“en_US”。
RESULTLIMIT = value
指定从基础搜索引擎返回的结果的最大数量。 取值范围为1-2 147 483 647的整数。 如果未指定RESULTLIMIT选项,则查询没有结果限制。

根据优化器选择的计划,不能对结果表的每一行调用该标量函数。 调用一次该函数,即可向底层搜索引擎发出查询请求,并从搜索引擎返回所有匹配主键的结果集。 然后将结果集与包含识别结果行的列的表合并。 在这种情况下,RESULTLIMIT值的作用类似于FETCH FIRST?? 从基础文本搜索引擎中提取的行,可作为优化工具使用。 如果搜索引擎对每行结果都进行了调用,因为优化程序认为这是最佳方案,那么RESULTLIMIT选项就没有任何效果。 此外,当CONTAINS函数与比较运算符(<、>、<=和>=)或相等运算符(=)和0(零)一起使用时,RESULTLIMIT选项不起作用。

同义词= 关闭同义词= 开启
指定是否使用与文本搜索索引相关联的同义词字典。 使用同义词工具将同义词词典添加到收藏中。 缺省值为 OFF。
OFF
不使用同义词字典。
ON
使用与文本搜索索引关联的同义词词典。

函数的结果是一个大整数。 如果第二个参数可以为空,则结果可以为空。 如果第二个参数为空,则结果为空值。 如果第三个参数为空,则结果与未指定第三个参数相同。

如果文档中包含与搜索参数中指定的搜索条件匹配的内容,则结果为1。 否则,结果为 0。

CONTAINS 是非确定性函数。

示例

示例 1
假设员工技能信息存储在名为 EMP_RESUME 的表格中。 以下语句用于查找所有在简历中包含" COBOL "的员工。 文本搜索自变量不区分大小写。
SELECT EMPNO 
	FROM EMP_RESUME  
	WHERE RESUME_FORMAT = 'ascii' 
		AND CONTAINS(RESUME, 'cobol') = 1 
示例 2

搜索参数不必是字符串常量。 搜索参数可以是任何SQL字符串表达式,包括主机变量中包含的字符串。

以下语句在COMMENT列中搜索精确的“ate”一词:

char search_arg[100]; /* input host variable */  
...  
EXEC SQL DECLARE C3 CURSOR FOR    
   SELECT CUSTKEY    
   FROM K55ADMIN.CUSTOMERS    
   WHERE CONTAINS(COMMENT, :search_arg)= 1    
   ORDER BY CUSTKEY;  
strcpy(search_arg, "ate");  
EXEC SQL OPEN C3;  
...  
示例 3

以下陈述随机抽取了10名学生的在线作文,其中包含西班牙语中的“化石燃料”一词,即“combustible fósil” 这些学生将受邀参加电台采访。

使用为关联文本搜索索引创建的同义词词典。 因为只需要10名学生,所以您可以使用RESULTLIMIT选项来优化查询,从而限制文本搜索服务器的结果数量。

SELECT FIRSTNME, LASTNAME 
   FROM STUDENT_ESSAYS 
   WHERE CONTAINS(TERM_PAPER, 'combustible fósil', 
      'QUERYLANGUAGE= es_ES RESULTLIMIT  = 10 SYNONYM=ON') = 1
示例 4

以下示例说明如何在动态准备的语句中使用CAST规范,以提供类型化参数标记作为CONTAINS函数的参数。 CAST规范定义了参数标记(?)的数据类型。

CONTAINS(C1,CAST(? AS CHAR(10)))