Partilhar via


Funções em Nós – number

Aplica-se: SQL Server

Retorna o valor numérico do nó indicado por $arg.

Sintaxe

  
fn:number() as xs:double?   
fn:number($arg as node()?) as xs:double?  

Argumentos

$arg
Nó cujo valor será retornado como um número.

Comentários

Se $arg não for especificado, o valor numérico do nó de contexto, convertido em um double, será retornado. No SQL Server, fn:number() sem um argumento só pode ser usado no contexto de um predicado dependente de contexto. Mais precisamente, só pode ser usado entre parênteses ([]). Por exemplo, a expressão a seguir retorna o <ROOT> elemento.

declare @x xml  
set @x='<ROOT>111</ROOT>'  
select @x.query('/ROOT[number()=111]')  

Se o valor do nó não for uma representação lexical válida de um tipo numérico simples, conforme definido em Esquema XML Parte 2: Tipos de dados, Recomendação do W3C, a função retornará uma sequência vazia. Não é oferecido suporte a NaN.

Exemplos

Este tópico fornece exemplos de XQuery em relação a instâncias XML armazenadas em várias colunas de tipo xml no banco de dados AdventureWorks.

R. Usando a função number() Xquery para recuperar o valor numérico de um atributo

A consulta a seguir recupera o valor numérico do atributo de tamanho de lote do primeiro local de centro de trabalho no processo de fabricação do Modelo do Produto 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 o seguinte na consulta anterior:

  • A função number() não é necessária, conforme mostrado pela consulta do atributo LotSizeA . Isso é uma função XPath 1.0 e é incluída principalmente por razões de compatibilidade com versões anteriores.

  • O XQuery para LotSizeB especifica a função number e é redundante.

  • A consulta para LotSizeD ilustra o uso de um valor numérico em uma operação aritmética.

Este é o resultado:

ProductModelID   Result  
----------------------------------------------  
7              <Location LocationID="10"   
                         LotSizeA="100"   
                         LotSizeB="100"   
                         LotSizeC="101" />  

Limitações de implementação

Estas são as limitações:

  • A função number() aceita apenas nós. Ela não aceita valores atômicos.

  • Quando os valores não podem ser retornados como um número, a função number() retorna a sequência vazia em vez de NaN.

Confira também

Funções XQuery em Tipos de Dados XML