min (función de XQuery)
Se devuelve a partir de un flujo de valores atómicos, $arg, el único elemento cuyo valor es inferior al de todos los demás.
Sintaxis
fn:min($arg as xdt:anyAtomicType*) as xdt:anyAtomicType?
Argumentos
- $arg
Secuencia de elementos de los cuales se devolverá el valor mínimo.
Comentarios
Todos los tipos de valores atomizados que se pasarán a min() deben ser subtipos del mismo tipo base. Los tipos base aceptados son los que admiten la operación gt. Estos tipos incluyen los tres tipos base numéricos integrados: de fecha y hora, xs:string, xs:boolean y xdt:untypedAtomic. Los valores del tipo xdt:untypedAtomic se convierten a xs:double. Si estos tipos se mezclan o si se pasan valores de otros tipos, se generará un error estático.
El resultado de min() recibe el tipo base de los tipos pasados, como xs:double en el caso de xdt:untypedAtomic. Si la entrada se encuentra estáticamente vacía, se considera implícitamente vacía y se devuelve un error estático.
La función min() devuelve el único valor de la secuencia inferior a todos los demás en la secuencia de entrada. En el caso de los valores xs:string, se utiliza la intercalación de puntos de código Unicode predeterminada. Si no se puede convertir un valor xdt:untypedAtomic a xs:double, se omitirá en la secuencia de entrada, $arg. Si la entrada es una secuencia vacía calculada dinámicamente, se devolverá la secuencia vacía.
Ejemplos
Este tema proporciona ejemplos de XQuery en instancias XML almacenadas en varias columnas de tipo xml de la base de datos AdventureWorks.
A.Usar la función min() de XQuery para encontrar la ubicación de centro de trabajo con el menor número de horas de trabajo
La consulta siguiente recupera todas las ubicaciones de centro de trabajo del proceso de fabricación de un modelo de producto (ProductModelID=7) con el menor número de horas de trabajo (LaborHours). Por lo general, se devuelve una sola ubicación, tal como se muestra a continuación. Si existen varias ubicaciones con el mismo número mínimo de horas de trabajo, se devolverán todas.
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
Observe lo siguiente en la consulta anterior:
- La palabra clave namespace del prólogo de XQuery define un prefijo de espacio de nombres. A continuación, el prefijo se utiliza en el cuerpo de XQuery.
El cuerpo de XQuery construye el XML que tiene un elemento <Location> con los atributos WCID y LaborHrs.
- Esta consulta también recupera los valores de ProductModelID y de nombres.
El resultado es el siguiente:
ProductModelID Name Result
--------------- ---------------- ---------------------------------
7 HL Touring Frame <Location WCID="45" LaborHrs="0.5"/>
Limitaciones de la implementación
Éstas son las limitaciones:
La función min() asigna todos los enteros a xs:decimal.
No se admite la función min() en valores de tipo xs:duration.
No se admiten las secuencias que mezclan tipos en límites de tipo base.
No se admite la opción sintáctica que proporciona una intercalación.