次の方法で共有


ノードの関数 - number

適用対象:SQL Server

$argによって示されるノードの数値を返します。

構文

  
fn:number() as xs:double?   
fn:number($arg as node()?) as xs:double?  

引数

$arg
値が数値として返されるノード。

解説

$argが指定されていない場合は、double に変換されたコンテキスト ノードの数値が返されます。 SQL Serverでは、引数を指定しない fn:number() は、コンテキスト依存述語のコンテキストでのみ使用できます。 具体的には、角かっこ ([ ]) 内でのみ使用できます。 たとえば、次の式は 要素を <ROOT> 返します。

declare @x xml  
set @x='<ROOT>111</ROOT>'  
select @x.query('/ROOT[number()=111]')  

XML スキーマ パート 2:Datatypes、W3C Recommendation で定義されているように、ノードの値が数値単純型の有効な字句表現でない場合、関数は空のシーケンスを返します。 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  

上のクエリに関して、次の点に注意してください。

  • LotSizeA 属性のクエリで示されているように、number() 関数は必要ありません。 これは XPath 1.0 関数で、主に旧バージョンとの互換性上の理由で含まれています。

  • LotSizeB の XQuery は number 関数を指定し、冗長です。

  • LotSizeD のクエリは、算術演算での数値の使用を示しています。

結果を次に示します。

ProductModelID   Result  
----------------------------------------------  
7              <Location LocationID="10"   
                         LotSizeA="100"   
                         LotSizeB="100"   
                         LotSizeC="101" />  

実装の制限事項

制限事項は次のとおりです。

  • number() 関数はノードのみを受け入れます。 アトミック値を受け取ることはできません。

  • 数値として値を返すことができない場合、 number() 関数は NaN ではなく空のシーケンスを返します。

参照

xml データ型に対する XQuery 関数