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() 的结果类型为传入类型的基类型,例如,传入类型为 xdt:untypedAtomic 时为 xs:double。如果输入为静态空值,则空值为隐式表达,并会返回静态错误。

min() 函数返回输入序列中的最小值。对于 xs:string 值,则使用默认的 Unicode 码位排序规则。如果无法将 xdt:untypedAtomic 值转换为 xs:double,则在输入序列 $arg 中忽略该值。如果输入是动态计算的空序列,则返回空序列。

示例

本主题提供了一些对 XML 实例的 XQuery 示例,这些实例存储在 AdventureWorks 数据库内不同的 xml 类型列中。有关这些列的概述,请参阅AdventureWorks 数据库中的 xml 数据类型表示形式

A. 使用 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

请注意上述查询的以下方面:

  • XQuery Prolog 中的 namespace 关键字定义命名空间前缀。然后,将此前缀用于 XQuery 主体中。

XQuery 主体构造的 XML 包含一个 <Location> 元素,该元素具有 WCID 和 LaborHrs 属性。

  • 该查询也检索 ProductModelID 和名称值。

结果如下:

ProductModelID   Name              Result
---------------  ----------------  ---------------------------------
7                HL Touring Frame  <Location WCID="45" LaborHrs="0.5"/> 

实现限制

限制如下:

  • min() 函数将所有整数映射到 xs:decimal。

  • 不支持 min() 函数使用类型为 xs:duration 的值。

  • 不支持跨基类型边界混合类型的序列。

  • 不支持提供排序规则的语法选项。