number (función de XQuery)
Devuelve el valor numérico del nodo indicado por $arg.
Sintaxis
fn:number() as xs:double?
fn:number($arg as node()?) as xs:double?
Argumentos
- $arg
Nodo cuyo valor se devolverá como un número.
Comentarios
Si no se especifica $arg, se devolverá el valor numérico del nodo de contexto convertido en un valor doble. En SQL Server, fn:number() sin un argumento solo se puede utilizar en el contexto de un predicado dependiente del contexto. En concreto, solo se puede utilizar entre corchetes ([ ]). Por ejemplo, la expresión siguiente devuelve el elemento <ROOT>.
declare @x xml
set @x='<ROOT>111</ROOT>'
select @x.query('/ROOT[number()=111]')
Si el valor del nodo no es una representación léxica válida de un tipo simple numérico, tal como se define en XML Schema Part 2:Datatypes, W3C Recommendation, la función devolverá una secuencia vacía. No se admiten los valores NaN.
Ejemplos
En este tema se ofrecen ejemplos de consultas XQuery con instancias XML almacenadas en varias columnas de tipo xml en la base de datos AdventureWorks.
A.Usar la función number() de XQuery para recuperar el valor numérico de un atributo
La consulta siguiente recupera el valor numérico del atributo de tamaño de lote de la primera ubicación de centro de trabajo del proceso de fabricación del modelo de producto 7.
SELECT ProductModelID, Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" ;
for $i in (//AWMI:root//AWMI:Location)[1]
return
<Location LocationID="{ ($i/@LocationID) }"
LotSizeA="{ $i/@LotSize }"
LotSizeB="{ number($i/@LotSize) }"
LotSizeC="{ number($i/@LotSize) + 1 }" >
</Location>
') as Result
FROM Production.ProductModel
WHERE ProductModelID=7
Observe lo siguiente en la consulta anterior:
La función number() no es obligatoria, tal como se muestra en la consulta del atributo LotSizeA. Se trata de una función de XPath 1.0 incluida sobre todo para mantener la compatibilidad con versiones anteriores.
La consulta XQuery de LotSizeB especifica la función de número y es redundante.
La consulta de LotSizeD ilustra la utilización de un valor de número en una operación aritmética.
El resultado es el siguiente:
ProductModelID Result
----------------------------------------------
7 <Location LocationID="10"
LotSizeA="100"
LotSizeB="100"
LotSizeC="101" />
Limitaciones de la implementación
Éstas son las limitaciones:
La función number() solo acepta nodos. No acepta valores atómicos.
Cuando no se pueden devolver valores como un número, la función number() devuelve le secuencia vacía en lugar de NaN.