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