number 函數 (XQuery)
傳回 $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。
範例
本主題是針對 XML 執行個體提供 XQuery 範例,這些執行個體是儲存在 AdventureWorks 資料庫的各個 xml 類型的資料行中。如需這些資料行中每個資料行的概觀,請參閱<在 AdventureWorks 資料庫中的 xml 資料類型表示法>。
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 會指定 number 函數,所以是多餘的。
LotSizeD 的查詢說明算術運算中數值的使用。
以下是結果:
ProductModelID Result
----------------------------------------------
7 <Location LocationID="10"
LotSizeA="100"
LotSizeB="100"
LotSizeC="101" />
實作限制
以下為其限制:
number() 函數只接受節點。它不接受不可部份完成值。
當值無法以數字傳回時,number() 函數會傳回空白時序而不是 NaN。