Поделиться через


Сравнения с несколькими значениями (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] являются допустимыми, а МАССИВ [1[,2][,3]] — нет.

 

Метод, используемый для определения того, возвращает ли многозначное сравнение значение true или false, задается необязательным квантификатором. В следующих разделах описывается каждый квантификатор и принцип работы каждого оператора сравнения при использовании квантификатора.

Квантификатор отсутствует

Если квантификатор не указан, каждый элемент в левой части сравнения сравнивается с элементом в той же позиции справа. Сравнение начинается с первого элемента в массивах и проходит по последнему элементу. Если все элементы слева эквивалентны соответствующим элементам в правой части, количество элементов массива используется для определения того, какой массив больше.

В следующей таблице показаны операции операторов сравнения, если квантификатор не указан, и приводится краткое описание каждого из них.

Оператор Описание
= Значение "Равно" возвращает значение true, если каждый левый элемент имеет то же значение, что и соответствующий правый элемент, а оба массива имеют одинаковое количество элементов.
!= или <> Значение "Не равно" возвращает значение true, если один или несколько левых элементов имеют значения, отличные от соответствующих правых элементов, или если массивы слева и справа не имеют одинакового количества элементов.
> "Больше чем" возвращает значение true, если значение каждого левого элемента больше значения соответствующего правого элемента. Если все значения левого элемента точно соответствуют соответствующим правым элементам, а массив слева содержит больше элементов, чем массив справа, функция "больше" возвращает значение true.
>= Значение "Больше или равно" возвращает значение true, если значение каждого левого элемента больше или равно значению соответствующего правого элемента. Если все значения левого элемента равны или больше, чем соответствующие правые элементы, а левый массив содержит те же или несколько элементов, что и массив справа, значение "больше" возвращает значение true.
< "Меньше чем" возвращает значение true, если значение каждого левого элемента меньше значения соответствующего правого элемента. "Меньше чем" также возвращает значение true, если в левой части меньше элементов, чем в правой части.
<= Значение "Меньше или равно" возвращает значение true, если значение каждого левого элемента меньше или равно значению соответствующего правого элемента. Если все значения левого элемента равны или меньше соответствующих правых элементов, а левый массив содержит те же или меньше элементов, чем массив справа, значение "больше" возвращает значение true.

 

КВантификатор ALL

Квантификатор ALL указывает, что каждый элемент в левой части сравнивается с каждым элементом справа. Чтобы вернуть значение true, сравнение должно быть true для каждого элемента слева по сравнению с каждым элементом справа. Количество элементов в левой и правой сторонах массива не влияет на результат.

В следующей таблице показано, как каждый оператор сравнения работает с квантификатором ALL.

Оператор Описание
= Значение "Равно" возвращает значение true, если каждое значение левого элемента совпадает со значением каждого правого элемента.
!= или <> Значение "Не равно" возвращает значение true, если хотя бы одно из значений левого элемента отличается от любого из значений правого элемента.
> "Больше чем" возвращает значение true, если каждое значение левого элемента больше значения каждого правого элемента.
>= "Больше или равно" возвращает значение true, если каждое значение левого элемента больше или равно значению каждого правого элемента.
< "Меньше" возвращает значение true, если каждое значение левого элемента меньше значения каждого правого элемента.
<= "Меньше или равно" возвращает значение true, если каждое значение левого элемента меньше или равно значению каждого правого элемента.

 

НЕКОТОРЫЙ (или ЛЮБОЙ) квантификатор

Квантификатор SOME и ЛЮБОЙ квантификатор могут использоваться взаимозаменяемо. Как и квантификатор 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]

Reference

Предикат LIKE

Сравнение литеральных значений

Предикат NULL

Основные понятия

Полнотекстовые предикаты

Не полнотекстовые предикаты