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


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

А. Использование функции 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;
  • последовательности, смешивающие типы в границах базового типа, не поддерживаются;
  • синтаксический параметр, предоставляющий параметры сортировки, не поддерживается.

См. также

Справочник

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

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

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