Сравнения с несколькими значениями (ARRAY)
Столбцы, хранящиеся в индексе контента, могут иметь несколько значений, и эти многозначные столбцы можно сравнить с помощью предиката сравнения МАССИВа.
Предикат сравнения МАССИВа имеет следующий синтаксис:
...WHERE <column> <comp_op> [<quantifier>] <comparison_list>
...WHERE <column> <comp_op> <value>
Ошибка возвращается, если ссылка на столбец не является многозначным столбцом. Тип данных столбца должен быть совместим с элементами списка сравнения. При необходимости ссылка на столбец может быть приведение в качестве другого типа данных.
Оператор сравнения (comp_op) может быть любым из обычных операторов сравнения. В многозначном сравнении операторы сравнения имеют немного разные значения в зависимости от того, используется ли квантификатор. Квантификаторы определяют, следует ли выполнять сравнение со всеми или некоторыми значениями в списке сравнения. Функции операторов сравнения приведены в таблицах, описывающих каждый квантификатор (ALL и SOME) далее в этом документе.
Значение после оператора указывает одно литеральное значение, которое сравнивается со всеми элементами многозначного столбца. Если любой элемент соответствует значению, предикат имеет значение true.
В списке сравнения указывается массив литеральных значений, сравниваемых с многозначным столбцом. Следующий синтаксис для списка сравнения:
ARRAY '['<literal> [,<literal>]']'
Важный
Помните о синтаксисе списка сравнения. Группа литералов, составляющих список сравнения, должна быть окружена квадратными скобками. Не окружайте отдельные элементы списка сравнения квадратными скобками. Поэтому массив [1] и МАССИВ [1,2,3] допустимы, но МАССИВ [1[,2][,3]] не является.
Метод, используемый для определения того, возвращает ли многозначное сравнение значение true или false, задается необязательным квантификатором. В следующих разделах описывается каждый квантификатор и принцип работы каждого оператора сравнения при использовании квантификатора.
Отсутствующий квантификатор
Если квантификатор не указан, каждый элемент в левой части сравнения сравнивается с элементом в той же позиции справа. Сравнение начинается с первого элемента в массивах и выполняется через последний элемент. Если все элементы на левой стороне эквивалентны соответствующим элементам справа, количество элементов массива используется для определения большего массива.
В следующей таблице показана операция операторов сравнения, если не указан квантификатор и содержит краткое описание каждого.
Оператор | Описание |
---|---|
= | Значение "Equal to" возвращает значение true, если каждый левый элемент имеет то же значение, что и соответствующий правый элемент, и оба массива имеют одинаковое количество элементов. |
!= или <> | Значение "Не равно" возвращает значение true, если один или несколько левых элементов имеют значения, отличающиеся от соответствующих правых элементов, или если массивы слева и правой стороны не имеют одинакового количества элементов. |
> | Значение "Больше, чем" возвращает значение true, если значение каждого левого элемента больше значения соответствующего правого элемента. Если все значения элементов слева точно соответствуют соответствующим элементам правой стороны, а левый массив содержит больше элементов, чем правый массив, возвращает значение true. |
>= | Значение "Больше или равно" возвращает значение true, если значение каждого левого элемента больше или равно значению соответствующего правого элемента. Если все значения элементов слева равны или больше соответствующих правых элементов, а левый массив имеет одинаковые или более элементы, чем правый массив, возвращает значение true. |
< | "Меньше чем" возвращает значение true, если значение каждого левого элемента меньше значения соответствующего правого элемента. "Меньше чем" также возвращает значение true, если левая сторона имеет меньше элементов, чем в правой части. |
<= | Значение "Меньше или равно" возвращает значение true, если значение каждого левого элемента меньше или равно значению соответствующего правого элемента. Если все значения элементов левой стороны равны или меньше соответствующих правых элементов, а левый массив имеет одинаковые или меньше элементов, чем массив справа, возвращает значение true. |
ALL Quantifier
Квантификатор ALL указывает, что каждый элемент в левой части сравнивается с каждым элементом справа. Чтобы вернуть значение true, сравнение должно быть true для каждого элемента в левой части по сравнению с каждым элементом справа. Количество элементов в левой и правой сторонах массива не влияет на результат.
В следующей таблице показано, как каждый оператор сравнения работает с квантификатором ALL.
Оператор | Описание |
---|---|
= | Значение "Equal to" возвращает значение true, если каждое левое значение элемента совпадает со значением каждого правого элемента. |
!= или <> | Значение "Не равно" возвращает значение true, если по крайней мере одно из значений элемента слева отличается от любого из значений элемента справа. |
> | Значение "Больше, чем" возвращает значение true, если каждое значение элемента слева больше, чем каждое значение элемента справа. |
>= | Значение "Больше или равно" возвращает значение true, если каждое левое значение элемента больше или равно каждому значению правого элемента. |
< | Значение "Меньше, чем" возвращает значение true, если каждое левое значение элемента меньше, чем каждое значение элемента справа. |
<= | Значение "Меньше или равно" возвращает значение true, если каждое левое значение элемента меньше или равно каждому значению элемента справа. |
НЕКОТОРЫЕ (или ЛЮБОЙ) Квантификатор
Квантификатор SOME и квантификатор ANY можно использовать взаимозаменяемо. Как и квантификатор ALL, квантификатор SOME указывает, что каждый элемент в левой части сравнивается с каждым элементом справа. Чтобы вернуть значение true, сравнение должно иметь значение по крайней мере для одного из элементов в левой части по сравнению с любым элементом справа. Количество элементов в левой и правой части массивов не влияет на результат.
В следующей таблице показано, как каждый оператор сравнения работает с квантификатором SOME.
Оператор | Описание |
---|---|
= | Значение "Equal to" возвращает значение 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]
Связанные разделы
-
Справочник
-
концептуальные
-
предика ты, отличные отFull-Text