基于节点的函数 - 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。