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


Функция 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;

  • не поддерживаются последовательности, в которых смешиваются типы на основе разных базовых типов;

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

См. также

Справочник