節點的相關函式 - 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 部分 Datatypes、 W3C 建議中所定義,函式會傳回空序列。 不支援 NaN。
範例
本主題針對 AdventureWorks 資料庫中各種 xml 類型數據行中儲存的 XML 實例,提供 XQuery 範例。
A. 使用 number() XQuery 函式來擷取屬性的數值
下列查詢會從產品型號 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
請注意下列項目是從上一個查詢而來:
number() 函式並非必要,如 LotSizeA 屬性的查詢所示。 這是 XPath 1.0 函式,主要基於回溯相容性考慮。
LotSizeB 的 XQuery 會指定數位函式,而且是多餘的。
LotSizeD 的查詢說明在算術運算中使用數位值。
以下是結果:
ProductModelID Result
----------------------------------------------
7 <Location LocationID="10"
LotSizeA="100"
LotSizeB="100"
LotSizeC="101" />
實作限制
以下是限制:
number() 函式只接受節點。 它不接受不可部分完成的值。
當值無法當做數位傳回時 ,number() 函式會傳回空序列,而不是 NaN。