Funciones usadas en nodos: number
Se aplica a: SQL Server
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 devuelve el valor numérico del nodo de contexto, convertido en double. En SQL Server, fn:number() sin un argumento solo se puede usar 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 <ROOT
> elemento .
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 devuelve una secuencia vacía. No se admiten los valores NaN.
Ejemplos
En este tema se proporcionan ejemplos de XQuery en 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 necesaria, 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.
XQuery para LotSizeB especifica la función number y es redundante.
La consulta de LotSizeD muestra el uso de un valor numérico 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 la secuencia vacía en lugar de NaN.