Operadores XQuery em relação ao tipo de dados xml

A XQuery oferece suporte aos seguintes operadores:

  • Operadores numéricos (+, -, *, div, mod)

  • Operadores para comparação de valor (eq, ne, lt, gt, le, ge)

  • Operadores para comparação geral ( =, !=, <, >, <=, >= )

Para obter mais informações sobre esses operadores, consulte Expressões de comparação (XQuery)

Exemplos

A. Usando operadores gerais

A consulta ilustra o uso de operadores gerais que se aplicam a sequências, além de comparar sequências. A consulta recupera uma sequência de números de telefone para cada cliente da coluna AdditionalContactInfo da tabela Person. Em seguida, essa sequência é comparada com a sequência de dois números de telefone ("111-111-1111", "222-2222").

A consulta usa o operador de comparação =. Cada nó na sequência do lado direito do operador = é comparado com cada nó na sequência do lado esquerdo. Se os nós forem correspondentes, a comparação de nó será TRUE. Em seguida, o nó será convertido em int, comparado com 1 e a consulta retornará o ID do cliente.

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 BusinessEntityID 
FROM   Person.Person
WHERE  AdditionalContactInfo.value('
      //ACI:AdditionalContactInfo//ACT:telephoneNumber/ACT:number = 
          ("111-111-1111", "222-2222")',
      'bit')= cast(1 as bit);

Há outra maneira de observar como a consulta anterior funciona: cada valor de número de telefone recuperado da coluna AdditionalContactInfo é comparado com o conjunto de dois números telefônicos. Se o valor estiver no conjunto, esse cliente será retornado no resultado.

B. Usando um operador numérico

O operador + nessa consulta é um operador de valor, pois se aplica a um único item. Por exemplo, o valor 1 é adicionado a um tamanho de lote retornado pela consulta:

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. Usando um operador de valor

A seguinte consulta recupera os elementos <Picture> de um modelo de produto em que o tamanho da imagem é "pequeno":

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;

Como ambos os operandos para o operador eq são valores atômicos, o operador de valor é usado na consulta. É possível gravar a mesma consulta usando o operador de comparação geral (=).