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


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 в базе данных AdventureWorks. Обзор каждого из этих столбцов см. в разделе Представление типов xml-данных в базе данных AdventureWorks.

А. Использование функции 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 не поддерживается.
  • Синтаксический параметр для указания параметров сортировки не поддерживается.

См. также

Справочник

Применение функций XQuery к типу данных XML

Справка и поддержка

Получение помощи по SQL Server 2005