多值 (ARRAY) 比较

存储在内容索引中的列可以有多个值,并且可以使用 ARRAY 比较谓词来比较这些多值列。

ARRAY 比较谓词具有以下语法:

...WHERE <column> <comp_op> [<quantifier>] <comparison_list>
                
...WHERE <column> <comp_op> <value>

如果列引用不是多值列,则返回错误。 列数据类型必须与比较列表的元素兼容。 如有必要,可将列引用 强制转换为 另一种数据类型。

比较运算符 (comp_op) 可以是任何常规比较运算符。 在多值比较中,比较运算符的含义略有不同,具体取决于是否使用限定符。 限定符确定是应对比较列表中的所有值还是部分值进行比较。 比较运算符的函数在描述本文档后面的 ALL 和 SOME () 的每个限定符的表中提供。

运算符后面的值指定与多值列的所有元素进行比较的单个文本值。 如果任何元素与值匹配,则谓词为 true。

比较列表指定与多值列进行比较的文本值的数组。 比较列表的语法如下:

ARRAY '['<literal> [,<literal>]']'

重要

请注意比较列表语法。 构成比较列表的文字组必须用方括号括起来。 不要用方括号将比较列表的各个元素括起来。 因此,ARRAY [1] 和 ARRAY [1,2,3] 有效,但 ARRAY [1[,2][,3]] 无效。

 

用于确定多值比较返回 true 还是 false 的方法由可选限定符指定。 以下部分介绍每个限定符,以及使用限定符时每个比较运算符的工作原理。

Absent 限定符

如果未指定限定符,则比较左侧的每个元素都与右侧相同位置的元素进行比较。 比较从数组中的第一个元素开始,并持续到最后一个元素。 如果左侧的所有元素都等效于右侧的相应元素,则使用数组元素的数量来确定哪个数组更大。

下表显示了未指定限定符时比较运算符的操作,并提供了每个限定符的简要说明。

运算符 说明
= 当每个左侧元素的值与相应的右侧元素相同,并且两个数组具有相同数量的元素时,“等于”将返回 true。
!= 或 <> 如果一个或多个左侧元素的值不同于相应的右侧元素,或者当左侧和右侧数组的元素数不相同时,“不等于”将返回 true。
> 当每个左侧元素的值大于相应右侧元素的值时,“大于”将返回 true。 如果所有左侧元素值都与相应的右侧元素完全匹配,并且左侧数组的元素数多于右侧数组,则“大于”返回 true。
>= 当每个左侧元素的值大于或等于相应右侧元素的值时,“大于或等于”返回 true。 如果所有左侧元素值都等于或大于相应的右侧元素,并且左侧数组的元素与右侧数组相同或更多,则“大于”返回 true。
< 当每个左侧元素的值小于相应右侧元素的值时,“小于”将返回 true。 当左侧的元素少于右侧时,“小于”也会返回 true。
<= 当每个左侧元素的值小于或等于相应右侧元素的值时,“小于或等于”返回 true。 如果所有左侧元素值都等于或小于相应的右侧元素,并且左侧数组的元素与右侧数组相同或更少,则“大于”将返回 true。

 

ALL 限定符

ALL 限定符指定将左侧的每个元素与右侧的每个元素进行比较。 若要返回 true,与右侧每个元素进行比较时,左侧每个元素的比较必须为 true。 左右数组边的元素数对结果没有影响。

下表显示了每个比较运算符如何与 ALL 限定符一起使用。

运算符 说明
= 当每个左侧元素值与每个右侧元素值相同时,“等于”返回 true。
!= 或 <> 当至少有一个左侧元素值与任何右侧元素值不同时,“不等于”将返回 true。
> 当每个左侧元素值大于每个右侧元素值时,“大于”将返回 true。
>= 当每个左侧元素值大于或等于每个右侧元素值时,“大于或等于”返回 true。
< 当每个左侧元素值小于每个右侧元素值时,“小于”将返回 true。
<= 当每个左侧元素值小于或等于每个右侧元素值时,“小于或等于”返回 true。

 

某些 (或 ANY) 限定符

可以互换使用 SOME 限定符和 ANY 限定符。 与 ALL 限定符一样,SOME 限定符指定将左侧的每个元素与右侧的每个元素进行比较。 若要返回 true,与右侧的任何元素进行比较时,左侧至少一个元素的比较必须为 true。 左侧和右侧数组上的元素数对结果没有影响。

下表显示了每个比较运算符如何与 SOME 限定符一起使用。

运算符 说明
= 当至少有一个左侧元素值与任何右侧元素值相同时,“等于”将返回 true。
!= 或 <> 当左侧元素值均不与任何右侧元素值相同时,“不等于”将返回 true。
> 当至少有一个左侧元素值大于任何一个右侧元素值时,“大于”将返回 true。
>= 当至少有一个左侧元素值大于或等于任何一个右侧元素值时,“大于或等于”返回 true。
< 当至少有一个左侧元素值小于任何一个右侧元素值时,“小于”将返回 true。
<= 当至少有一个左侧元素值小于或等于任何一个右侧元素值时,“小于或等于”返回 true。

 

示例

以下示例检查文档是属于“财务”类别还是“计划”类别:

SELECT System.ItemUrl FROM SystemIndex WHERE System.Category =
SOME ARRAY['Finance','Planning']

以下比较结果均为 true。 请记住,在实际使用中,搜索查询语法要求左侧是属性,而不是文本值。

ARRAY [1,2] > ARRAY [1,1]
ARRAY [1,2] > ARRAY [1,1,2]
ARRAY [1,2] < ARRAY [1,2,3]
ARRAY [1,2] = SOME ARRAY [1,12,27,35,2]
ARRAY [1,1] != ALL ARRAY [1,2]
ARRAY [1,20,21,22] < SOME ARRAY [0,40]
ARRAY [1,20,21,22] < ANY ARRAY [0,40]

参考

LIKE 谓词

文本值比较

NULL 谓词

概念性

全文谓词

非全文谓词