contains (función de XQuery)

Devuelve un valor de tipo xs:boolean que indica si el valor de $arg1 contiene un valor de cadena especificado por $arg2.

Sintaxis

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

Argumentos

  • $arg1
    Valor de cadena que se va a comprobar.
  • $arg2
    Subcadena que se va a buscar.

Notas

Si el valor de $arg2 es una cadena de longitud cero, la función devuelve True. Si el valor de $arg1 es una cadena de longitud cero y el valor de $arg2 no lo es, la función devuelve False.

Si el valor de $arg1 o $arg2 es una secuencia vacía, el argumento se trata como una cadena de longitud cero.

La función contains() utiliza la intercalación de punto de código Unicode predeterminada de XQuery para la comparación de cadenas.

El valor de subcadena especificado para $arg2 debe ser menor o igual que 4000 caracteres. Si el valor especificado es superior a 4000 caracteres, se produce una condición de error dinámico y la función contains() devuelve una secuencia vacía en lugar de un valor booleano True o False. SQL Server 2005 no genera errores dinámicos de expresiones XQuery.

Ejemplos

En este tema se ofrecen ejemplos de consultas XQuery con instancias XML almacenadas en varias columnas de tipo xml en la base de datos AdventureWorks. Para obtener información general de cada una de estas columnas, vea Representación de tipo de datos xml en la base de datos AdventureWorks.

A. Utilizar la función contains() de XQuery para buscar una cadena de caracteres específica

La consulta siguiente busca los productos que contengan la palabra Aerodynamic en sus descripciones resumidas. La consulta devuelve el Id. de producto (ProductID) y el elemento <Summary> de esos productos.

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

Observe lo siguiente en la consulta anterior:

  • El documento de descripción del modelo de producto utiliza espacios de nombres. Por tanto, la palabra clave namespace define el prefijo del espacio de nombres en el prólogo de las consultas XQuery.
  • La cláusula WHERE utiliza el método value() del tipo de datos xml. Dentro del método Value se utiliza la función contains() de XQuery para determinar si el texto de <Summary> contiene la palabra Aerodynamic. El valor booleano devuelto por la función contain() se convierte en bit. Después, se compara con 1.

El resultado es el siguiente:

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>

Vea también

Referencia

Funciones de XQuery con el tipo de datos xml

Ayuda e información

Obtener ayuda sobre SQL Server 2005