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 de longueur zéro, la fonction retourne True. Si la valeur de $arg1 est une chaîne de longueur zéro et que la valeur de $arg2 n'est pas une chaîne de longueur zéro, la fonction retourne 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 2005 ne déclenche pas d'erreurs dynamiques sur les expressions XQuery.

Exemples

Cette rubrique fournit des exemples XQuery sur des instances XML stockées dans différentes colonnes de type xml dans la base de données AdventureWorks. Pour obtenir une vue d'ensemble de chaque colonne, consultez Représentation du type de données xml dans la base de données AdventureWorks.

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 leur synthèse de description. La requête retourne l'ID de produit et l'élément <Summary> pour ces produits.

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.value('
  contains( (/pd:ProductDescription/pd:Summary//*/text())[1], 
            "Aerodynamic")','bit')  = 1

Notez les éléments suivants relatifs à la requête précédente :

  • Le document de description de modèles de produits utilise des espaces de noms. Par conséquent, le mot clé namespace définit le préfixe d'espace de noms dans XQuery Prolog.
  • La clause WHERE utilise la méthode value() du type de données xml. À l'intérieur de la méthode, la fonction XQuery contains() est utilisée pour déterminer si le texte <Summary> contient le mot Aerodynamic. La valeur booléenne retournée par la fonction contains() est convertie en bit. Celui-ci est ensuite comparé à 1.

Voici le résultat obtenu :

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>

Voir aussi

Référence

Fonctions XQuery impliquant le type de données xml

Aide et Informations

Assistance sur SQL Server 2005