基于节点的函数 - number

适用于:SQL Server

返回 由 $arg 指示的节点的数值。

语法

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

自变量

$arg
将以数字返回其值的节点。

备注

如果未指定 $arg ,则返回已转换为双精度的上下文节点的数值。 在 SQL Server中,没有参数的 fn:number () 只能在依赖于上下文的谓词的上下文中使用。 特别要指出的是,它只能在方括号 ([ ]) 内使用。 例如,下面的表达式返回 <ROOT> 元素。

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

如果节点的值不是数字简单类型的有效词法表示形式,如 XML 架构第 2 部分:数据类型,W3C 建议中定义,则函数返回空序列。 不支持 NaN。

示例

本主题提供针对存储在 AdventureWorks 数据库中各种 xml 类型列中的 XML 实例的 XQuery 示例。

A. 使用 number() XQuery 函数检索属性的数值

下面的查询从产品型号 7 的生产进程的第一个生产车间检索 lot size 属性的数值。

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  

请注意上述查询的以下方面:

  • number () 函数不是必需的,如 LotSizeA 属性的查询所示。 这是一个 XPath 1.0 函数,主要是为了具有向后兼容性才包括在内。

  • LotSizeB 的 XQuery 指定数字函数,并且是冗余的。

  • LotSizeD 查询演示了在算术运算中使用数字值。

结果如下:

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

实现限制

限制如下:

  • number () 函数仅接受节点。 它不接受原子值。

  • 当值不能作为数字返回时, number () 函数返回空序列而不是 NaN。

另请参阅

针对 xml 数据类型的 XQuery 函数