Dela via


Funktioner på strängvärden – innehåller

gäller för:SQL Server

Returnerar ett värde av typen xs:booleskt värde som anger om värdet för $arg 1 innehåller ett strängvärde som anges av $arg 2.

Syntax

  
fn:contains ($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean?  

Argument

$arg 1
Strängvärde som ska testas.

$arg 2
Delsträng att leta efter.

Anmärkningar

Om värdet för $arg 2 är en sträng med noll längd returnerar funktionen True. Om värdet för $arg 1 är en sträng med noll längd och värdet för $arg 2 inte är en sträng med noll längd, returnerar funktionen False.

Om värdet för $arg 1 eller $arg 2 är den tomma sekvensen behandlas argumentet som strängen med noll längd.

Funktionen contains() använder XQuerys standardsortering av Unicode-kodpunkter för strängjämförelsen.

Delsträngsvärdet som anges för $arg 2 måste vara mindre än eller lika med 4 000 tecken. Om det angivna värdet är större än 4 000 tecken uppstår ett dynamiskt feltillstånd och funktionen contains() returnerar en tom sekvens i stället för ett booleskt värde för True eller False. SQL Server genererar inte dynamiska fel i XQuery-uttryck.

För att få skiftlägesokänsliga jämförelser kan versaler eller gemener användas.

Kompletterande tecken (surrogatpar)

Beteendet för surrogatpar i XQuery-funktioner beror på databasens kompatibilitetsnivå och i vissa fall på standardnamnområdes-URI:n för funktioner. Mer information finns i avsnittet "XQuery Functions Are Surrogate-Aware" i avsnittet Breaking Changes to Database Engine Features in SQL Server 2016. Se även ALTER DATABASE Compatibility Level (Transact-SQL) and Collation and Unicode Support.

Exempel

Det här avsnittet innehåller XQuery-exempel mot XML-instanser som lagras i olika xml-kolumner i AdventureWorks-databasen.

A. Använda funktionen contains() XQuery för att söka efter en specifik teckensträng

Följande fråga hittar produkter som innehåller ordet Aerodynamic i sammanfattningsbeskrivningarna. Frågan returnerar ProductID och elementet <Summary> för sådana produkter.

--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  

Resultat

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>

Se även

XQuery Functions mot xml-datatypen