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 sólo se puede utilizar en el contexto de un predicado dependiente del contexto. En concreto, sólo 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 XQuery con instancias XML almacenadas en varias columnas de tipo xml en la base de datos AdventureWorks2008R2. Para obtener información general de cada una de estas columnas, vea Representación de tipo de datos xml en la base de datos AdventureWorks2008R2.

A. Usar la función de XQuery number() 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.

Este es el resultado:

ProductModelID Result

----------------------------------------------

7 <Location LocationID="10"

LotSizeA="100"

LotSizeB="100"

LotSizeC="101" />

Limitaciones de la implementación

Estas 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.