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。