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.

Comentarios

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() usa 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 no genera errores dinámicos de expresiones XQuery.

Para obtener las comparaciones sin distinción entre mayúsculas y minúsculas, se pueden usar las funciones en mayúsculas o minúsculas.

Ejemplos

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

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 las descripciones resumidas. La consulta devuelve el Id. de producto (ProductID) y el elemento <Summary> de esos productos.

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

Resultados

Resultado de ProductModelID

-------------- ---------

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>