Compartir a través de


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() 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 consultas XQuery con instancias XML almacenadas en diversas columnas de tipo xml en la base de datos AdventureWorks. Para obtener información general de cada una de estas columnas, consulte 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 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 AdventureWorks
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>