xml データ型に対する XQuery の演算子

適用対象:SQL Server

XQuery では、次の演算子がサポートされています。

  • 数値演算子 (+、-、*、div、mod)

  • 値比較の演算子 (eq、ne、lt、gt、le、ge)

  • 一般的な比較の演算子 ( =, !=, , <, ><=, >= )

これらの演算子の詳細については、「比較式 (XQuery)」を参照してください。

A. 一般的な演算子の使用

次のクエリでは、シーケンスおよびシーケンスの比較に適用される一般的な演算子の用途について説明します。 クエリは、Contact テーブルの AdditionalContactInfo 列から各顧客の電話番号のシーケンスを取得します。 このシーケンスは、2 つの電話番号のシーケンス ("111-111-1111"、"222-2222") と比較されます。

クエリでは比較演算子を = 使用します。 演算子の右側のシーケンス内の各ノードは、左側の = シーケンス内の各ノードと比較されます。 ノードが一致する場合、ノードの比較は TRUE です。 その後、int に変換され、1 と比較され、クエリは顧客 ID を返します。

WITH XMLNAMESPACES (  
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo' AS ACI,  
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes' AS ACT)  
SELECT ContactID   
FROM   Person.Contact  
WHERE  AdditionalContactInfo.value('  
      //ACI:AdditionalContactInfo//ACT:telephoneNumber/ACT:number =   
          ("111-111-1111", "222-2222")',  
      'bit')= cast(1 as bit)  

前のクエリのしくみを確認するもう 1 つの方法があります。 AdditionalContactInfo 列から取得された各電話番号の値は、2 つの電話番号のセットと比較されます。 値がセット内にある場合、その顧客が結果に返されます。

B. 数値演算子の使用

このクエリの + 演算子は、1 つの項目に適用されるため、値演算子です。 たとえば、値 1 は、クエリによって返されるロット サイズに追加されます。

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) }"  
                   LotSize  = "{  number($i/@LotSize) }"  
                   LotSize2 = "{ number($i/@LotSize) + 1 }"  
                   LotSize3 = "{ number($i/@LotSize) + 2 }" >  
  
       </Location>  
') as Result  
FROM Production.ProductModel  
where ProductModelID=7  

C. 値演算子の使用

次のクエリでは、画像の <Picture> サイズが "小" である製品モデルの要素を取得します。

SELECT CatalogDescription.query('  
     declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
     for $P in /PD:ProductDescription/PD:Picture[PD:Size eq "small"]  
     return  
           $P  
    ') as Result  
FROM Production.ProductModel  
where ProductModelID=19  

eq 演算子のオペランドはどちらもアトミック値であるため、値演算子はクエリで使用されます。 一般的な比較演算子 ( = ) を使用して、同じクエリを記述できます。

参照

xml データ型に対する XQuery 関数
XML データ (SQL Server)
XQuery 言語リファレンス (SQL Server)