Partilhar via


Funções em nós - número

Aplica-se a:SQL Server

Devolve 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á devolvido como um número.

Comentários

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

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:Datatypes, W3C Recommendation, a função retornará uma sequência vazia. NaN não é suportado.

Exemplos

Este tópico fornece exemplos de XQuery em instâncias XML armazenadas em várias colunas xml type no banco de dados AdventureWorks.

Um. 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 do lote do primeiro local do centro de trabalho no processo de fabricação do Modelo de 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 da consulta anterior:

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

  • O XQuery para LotSizeB especifica a função de número 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() só aceita nós. 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.

Ver também

funções XQuery em relação ao tipo de dados xml