Функция min (XQuery)
Возвращает из последовательности атомарных значений аргумента $arg один элемент, значение которого меньше всех остальных.
Синтаксис
fn:min($arg as xdt:anyAtomicType*) as xdt:anyAtomicType?
Аргументы
- $arg
Последовательность элементов, из которой необходимо вернуть минимальное значение.
Замечания
Все типы атомизированных значений, которые передаются в функцию min(), должны быть подтипами одного базового типа. Допустимы те базовые типы, которые поддерживают операцию gt. Эти типы включают в себя три встроенных базовых численных типа, базовые типы даты-времени, а также xs:string, xs:boolean, xdt:untypedAtomic. Значения типа xdt:untypedAtomic приводятся к типу xs:double. При наличии обоих типов или при появлении значений других типов возникает статическая ошибка.
Результат min() получает базовый тип переданного в таких типах, как xs:double в случае xdt:untypedAtomic. Если вход статически пуст, подразумевается пустое значение и возвращается статическая ошибка.
Функция min() возвращает одно значение в последовательности, наименьшее во входящей последовательности. Для значений xs:string используются параметры сортировки кодовых точек Юникода по умолчанию. Если значение xdt:untypedAtomic не может быть приведено к типу xs:double, значение пропускается во входящей последовательности $arg. Если вход — это динамически вычисляемая пустая последовательность, возвращается пустая последовательность.
Примеры
В этом разделе представлены примеры XQuery-запросов к экземплярам XML-данных, хранящимся в различных столбцах типа xml в базе данных База данных AdventureWorks2008R2. Обзор каждого из этих столбцов см. в разделе Представление типов данных XML в базе данных AdventureWorks2008R2.
А. Использование функции min() XQuery для поиска расположения цеха с наименьшим количеством рабочих часов
Следующий запрос в процессе производства модели продукта (ProductModelID=7) получает все расположения цехов с наименьшим количеством рабочих часов. Обычно возвращается одно расположение, как показано далее. Если несколько расположений имеют одинаковое количество рабочих часов, возвращаются все.
select ProductModelID, Name, Instructions.query('
declare namespace AWMI=
"https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
for $Location in /AWMI:root/AWMI:Location
where $Location/@LaborHours =
min( /AWMI:root/AWMI:Location/@LaborHours )
return
<Location WCID= "{ $Location/@LocationID }"
LaborHrs= "{ $Location/@LaborHours }" />
') as Result
FROM Production.ProductModel
WHERE ProductModelID=7;
В приведенном запросе обратите внимание на следующие моменты.
- Ключевое слово namespace в прологе XQuery определяет префикс пространства имен. Данный префикс затем используется в теле XQuery.
Текст XQuery составляет XML, который имеет элемент <Расположение> с WCID и атрибутами LaborHrs.
- Запрос также получает номер ProductModelID и значения имени.
Результат:
ProductModelID Name Result
--------------- ---------------- ---------------------------------
7 HL Touring Frame <Location WCID="45" LaborHrs="0.5"/>
Ограничения реализации
Существуют следующие ограничения:
функция min() сопоставляет все целые числа с типом xs:decimal;
функция min() не поддерживается на значениях типа xs:duration;
не поддерживаются последовательности, в которых смешиваются типы на основе разных базовых типов;
синтаксический параметр для указания параметров сортировки не поддерживается.