分享方式:


節點的相關函式 - 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。

另請參閱

針對 xml 資料類型的 XQuery 函式