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.