Funzioni su valori stringa - contains
Si applica a:SQL Server
Restituisce un valore di tipo xs:boolean che indica se il valore di $arg 1 contiene un valore stringa specificato da $arg 2.
Sintassi
fn:contains ($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean?
Argomenti
$arg 1
Valore stringa da testare.
$arg 2
Sottostringa da cercare.
Osservazioni:
Se il valore di $arg 2 è una stringa di lunghezza zero, la funzione restituisce True. Se il valore di $arg 1 è una stringa di lunghezza zero e il valore di $arg 2 non è una stringa di lunghezza zero, la funzione restituisce False.
Se il valore di $arg 1 o $arg 2 è la sequenza vuota, l'argomento viene considerato come 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 della sottostringa specificato per $arg 2 deve essere minore o uguale a 4000 caratteri. Se il valore specificato è maggiore di 4000 caratteri, si verifica una condizione di errore dinamica e la funzione contains() restituisce una sequenza vuota anziché un valore booleano True o False. SQL Server non genera errori dinamici nelle espressioni XQuery.
Per ottenere confronti senza distinzione tra maiuscole e minuscole, è possibile usare le funzioni maiuscole o minuscole.
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 altre informazioni, vedere la sezione "Le funzioni XQuery sono compatibile con surrogati" nell'argomento Modifiche di rilievo apportate alle funzionalità del motore di database in SQL Server 2016. Vedere anche Livello di compatibilità ALTER DATABASE (Transact-SQL) e Regole di confronto e supporto Unicode.
Esempi
In questo argomento vengono forniti esempi di XQuery su istanze XML archiviate in varie colonne di tipo xml nel database AdventureWorks.
R. 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 ProductID e l'elemento <Summary
> per 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 AdventureWorks2022;
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>