Operatori di XQuery per il tipo di dati xml
XQuery supporta gli operatori seguenti:
Operatori numerici (+, -, *, div, mod)
Operatori di confronto per i valori (eq, ne, lt, gt, le, ge)
Operatori di confronto generali ( =, !=, <, >, <=, >= )
Per ulteriori informazioni su questi operatori, vedere Espressioni di confronto (XQuery).
Esempi
A. Utilizzo degli operatori generali
La query seguente illustra l'utilizzo degli operatori generali validi per le sequenze e inoltre per le sequenze di confronto. La query recupera una sequenza di numeri di telefono per ogni cliente dalla colonna AdditionalContactInfo della tabella Contact. La sequenza viene quindi confrontata con la sequenza di due numeri di telefono ("111-111-1111", "222-2222").
Nella query viene utilizzato l'operatore di confronto =. Ogni nodo della sequenza a destra dell'operatore = viene confrontato con ogni nodo della sequenza a sinistra dell'operatore. Se i nodi corrispondono, il confronto restituisce TRUE. Viene quindi convertito in un tipo di dati int e confrontato con 1, quindi la query restituisce l'ID del 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 ContactID
FROM Person.Contact
WHERE AdditionalContactInfo.value('
//ACI:AdditionalContactInfo//ACT:telephoneNumber/ACT:number =
("111-111-1111", "222-2222")',
'bit')= cast(1 as bit)
Esiste un altro modo per verificare il funzionamento della query precedente. Ogni numero di telefono recuperato dalla colonna AdditionalContactInfo viene confrontato con il gruppo di due numeri di telefono. Se il numero è presente nel gruppo, nel risultato viene restituito il cliente.
B. Utilizzo di un operatore numerico
L'operatore + nella query è un operatore per i valori, perché viene applicato a un singolo elemento. Ad esempio, il valore 1 viene aggiunto alle dimensioni di un lotto restituite dalla query:
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. Utilizzo di un operatore per valori
La query seguente recupera gli elementi <Picture> per un modello di prodotto per cui le dimensioni dell'immagine sono "small":
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
Poiché entrambi gli operandi dell'operatore eq sono valori atomici, nella query viene utilizzato l'operatore per valori. È possibile formulare la stessa query utilizzando l'operatore di confronto generale ( = ).
Vedere anche