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 doble. 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 las instancias XML almacenadas en varias columnas de tipo xml de 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 los valores no se pueden devolver como un número, la función number() devuelve la secuencia vacía en lugar de NaN.

Consulte también

Funciones de XQuery con el tipo de datos xml