Funciones usadas en valores de cadena: contains
Se aplica a:SQL Server
Devuelve un valor de tipo xs:boolean que indica si el valor de $arg 1 contiene un valor de cadena especificado por $arg 2.
Sintaxis
fn:contains ($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean?
Argumentos
$arg 1
Valor de cadena que se va a comprobar.
$arg 2
Subcadena que se va a buscar.
Comentarios
Si el valor de $arg 2 es una cadena de longitud cero, la función devuelve True. Si el valor de $arg 1 es una cadena de longitud cero y el valor de $arg 2 no es una cadena de longitud cero, la función devuelve False.
Si el valor de $arg 1 o $arg 2 es la secuencia vacía, el argumento se trata como la 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 $arg 2 debe ser menor o igual que 4000 caracteres. Si el valor especificado es mayor que 4000 caracteres, se produce una condición de error dinámica y la función contains() devuelve una secuencia vacía en lugar de un valor booleano de True o False. SQL Server no genera errores dinámicos en expresiones XQuery.
Para obtener comparaciones que no distinguen mayúsculas de minúsculas, se pueden usar las funciones mayúsculas o minúsculas.
Caracteres adicionales (pares suplentes)
El comportamiento de pares suplentes en las funciones XQuery depende del nivel de compatibilidad de la base de datos y, en algunos casos, del URI del espacio de nombres predeterminado de las funciones. Para obtener más información, vea la sección "XQuery Functions Are Surrogate-Aware" en el tema Cambios importantes en las características del motor de base de datos en SQL Server 2016. Consulte también Alter DATABASE Compatibility Level (Transact-SQL) and Collation and Unicode Support (Nivel de compatibilidad de ALTER DATABASE [Transact-SQL]) y compatibilidad con Intercalación y Unicode.
Ejemplos
En este tema se proporcionan ejemplos de XQuery en las instancias XML almacenadas en varias columnas de tipo xml de 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 productID y el <Summary
> elemento de estos 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 AdventureWorks2022;
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
Results
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>