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


distinct-values (XQuery)

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

Синтаксис

fn:distinct-values($arg as xdt:anyAtomicType*) as xdt:anyAtomicType*

Аргументы

  • $arg
    Последовательность атомарных значений.

Замечания

Все типы атомарных значений, передаваемых функции distinct-values(), должны быть подтипами одного и того же базового типа. Допустимыми базовыми типами являются типы, которые поддерживают операцию eq. Эти типы включают в себя три встроенных базовых численных типа, базовые типы даты-времени, а также xs:string, xs:boolean, xdt:untypedAtomic. Значения типа xdt:untypedAtomic приводятся к типу xs:string. Если имеется смесь этих типов или передаются значения других типов, возникает статическая ошибка.

Результат функции distinct-values() принимает базовый тип переданных типов, например xs:string для xdt:untypedAtomic, с исходным количеством аргументов. Если вход статически пуст, подразумевается пустое значение, и формируется статическая ошибка.

Значения типа xs:string сравниваются в параметрах сортировки кодовых точек Юникода запроса XQuery по умолчанию.

Примеры

В этом разделе представлены примеры XQuery-запросов к экземплярам XML-данных, хранящимся в различных столбцах типа xml в базе данных База данных AdventureWorks2008R2. Обзор каждого из этих столбцов см. в разделе Представление типов данных XML в базе данных AdventureWorks2008R2.

А. Использование функции distinct-values() для удаления из последовательности повторяющихся значений

В этом примере экземпляр XML, содержащий телефонные номера, присваивается переменной типа xml. Запрос XQuery, заданный для этой переменной, использует функцию distinct-values(), чтобы получить список телефонных номеров, не содержащий дублирующихся значений.

declare @x xml;
set @x = '<PhoneNumbers>
 <Number>111-111-1111</Number>
 <Number>111-111-1111</Number>
 <Number>222-222-2222</Number>
</PhoneNumbers>'
-- 1st select
select @x.query('
  distinct-values( data(/PhoneNumbers/Number) )
') as result

Результат:

111-111-1111 222-222-2222

В следующем примере функции distinct-values() передается последовательность чисел (1, 1, 2). Функция удаляет из последовательности дублирующееся значение и возвращает два оставшихся.

declare @x xml;
set @x = '';
select @x.query('
  distinct-values((1, 1, 2))
') as result;

Запрос возвращает 1 2.

Ограничения реализации

Существуют следующие ограничения:

  • Функция distinct-values() сопоставляет целочисленное значение с xs:decimal.

  • Функция distinct-values() поддерживает только указанные выше типы данных и не поддерживает смесь базовых типов.

  • Функция distinct-values() для значений типа xs:duration не поддерживается.

  • Синтаксический параметр для указания параметров сортировки не поддерживается.

См. также

Справочник