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

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)

別の方法を使用して、上記のクエリがどのように機能するのかを観察することもできます。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. 値の演算子の使用

次のクエリでは、写真のサイズが "small" である製品モデルの <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 演算子に対する両方のオペランドがアトミック値なので、クエリでは値の演算子が使用されます。一般的な比較演算子 ( = ) を使用して、同じクエリを記述することもできます。