Funzione contains (XQuery)
Restituisce un valore di tipo xs:boolean che indica se il valore di $arg1 contiene un valore stringa specificato da $arg2.
Sintassi
fn:contains ($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean?
Argomenti
$arg1
Valore stringa da testare.$arg2
Sottostringa da cercare.
Osservazioni
Se il valore di $arg2 è una stringa di lunghezza zero, la funzione restituisce True. Se il valore di $arg1 è una stringa di lunghezza zero e il valore di $arg2 non è una stringa di lunghezza zero, la funzione restituisce False.
Se il valore di $arg1 o di $arg2 è la sequenza vuota, l'argomento viene considerato come la stringa di lunghezza zero.
La funzione contains() utilizza le regole di confronto dei punti di codice Unicode predefinite di XQuery per il confronto delle stringhe.
Il valore di sottostringa specificato per $arg2 deve essere inferiore o uguale a 4000 caratteri. Se il valore specificato è maggiore di 4000 caratteri, viene generato un errore dinamico e la funzione contains() restituisce una sequenza vuota anziché un valore booleano True o False. In SQL Server non vengono generati errori dinamici nelle espressioni XQuery.
Per ottenere confronti senza distinzione tra maiuscole e minuscole, è possibile utilizzare le funzioni upper-case o lower-case.
Caratteri supplementari (coppie di surrogati)
Il comportamento delle coppie di surrogati nelle funzioni XQuery dipende dal livello di compatibilità del database e, in alcuni casi, dall'URI dello spazio dei nomi predefinito per le funzioni. Per ulteriori informazioni, vedere la sezione "Le funzioni XQuery riconoscono i surrogati" nell'argomento Modifiche che possono causare problemi di funzionamento apportate alle funzionalità del Motore di database in SQL Server 2012.. Vedere anche Livello di compatibilità ALTER DATABASE (Transact-SQL) e Regole di confronto e supporto Unicode.
Esempi
In questo argomento vengono forniti esempi di utilizzo del linguaggio XQuery sulle istanze XML archiviate in diverse colonne di tipo xmlnel database AdventureWorks.
A.Utilizzo della funzione XQuery contains() per cercare una stringa di caratteri specifica
La query seguente trova i prodotti per i quali la descrizione di riepilogo contiene la parola Aerodynamic. La query restituisce il valore ProductID e l'elemento <Summary> relativi a tali prodotti.
--The product model description document uses
--namespaces. The WHERE clause uses the exit()
--method of the xml data type. Inside the exit method,
--the XQuery contains()function is used to
--determine whether the <Summary> text contains the word
--Aerodynamic.
USE AdventureWorks
GO
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd)
SELECT ProductModelID, CatalogDescription.query('
<Prod>
{ /pd:ProductDescription/@ProductModelID }
{ /pd:ProductDescription/pd:Summary }
</Prod>
') as Result
FROM Production.ProductModel
where CatalogDescription.exist('
/pd:ProductDescription/pd:Summary//text()
[contains(., "Aerodynamic")]') = 1
Risultati
ProductModelID Result
-------------- ---------
28 <Prod ProductModelID="28">
<pd:Summary xmlns:pd=
"https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">
<p1:p xmlns:p1="http://www.w3.org/1999/xhtml">
A TRUE multi-sport bike that offers streamlined riding and
a revolutionary design. Aerodynamic design lets you ride with
the pros, and the gearing will conquer hilly roads.</p1:p>
</pd:Summary>
</Prod>