contains, fonction (XQuery)

Retourne une valeur de type xs:boolean indiquant si la valeur de $arg1 contient une valeur de chaîne spécifiée par $arg2.

Syntaxe

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

Arguments

  • $arg1
    Valeur de chaîne à tester.

  • $arg2
    Sous-chaîne à rechercher.

Notes

Si la valeur de $arg2 est une chaîne nulle, la fonction retourne la valeur True. Si la valeur de $arg1 est une chaîne nulle et que la valeur de $arg2 n'est pas une chaîne nulle, la fonction retourne la valeur False.

Si la valeur de $arg1 ou de $arg2 est la séquence vide, l'argument est traité comme chaîne de longueur zéro.

La fonction contains() utilise le classement des points de code Unicode par défaut de XQuery pour la comparaison des chaînes.

La valeur de sous-chaîne spécifiée pour $arg2 doit être inférieure ou égale à 4 000 caractères. Si la valeur spécifiée est supérieure à 4 000 caractères, une condition d'erreur dynamique se produit et la fonction contains() retourne une séquence vide au lieu d'une valeur booléenne True ou False. SQL Server ne déclenche pas d'erreur dynamique sur les expressions XQuery.

Pour obtenir des comparaisons qui ne respectent pas la casse, il est possible d'utiliser les fonctions upper-case ou lower-case.

Exemples

Cette rubrique propose des exemples de XQuery relatifs à des instances XML stockés dans différentes colonnes de type xml tirées de la base de données AdventureWorks2008R2. Pour obtenir une vue d'ensemble de chacune de ces colonnes, consultez Représentation du type de données xml dans la base de données AdventureWorks2008R2.

A. Utilisation de la fonction contains() XQuery pour rechercher une chaîne de caractères spécifique.

La requête suivante recherche des produits qui contiennent le mot Aerodynamic dans les descriptions résumées. La requête retourne l'ID de produit et l'élément <Summary> pour ces produits.

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

Résultats

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>