Funções em Valores da Cadeia de Caracteres – contains
Aplica-se: SQL Server
Retorna um valor do tipo xs:boolean indicando se o valor de $arg 1 contém um valor de cadeia de caracteres especificado por $arg 2.
Sintaxe
fn:contains ($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean?
Argumentos
$arg 1
Valor da cadeia de caracteres para testar.
$arg 2
Subcadeia de caracteres a ser procurada.
Comentários
Se o valor de $arg 2 for uma cadeia de caracteres de comprimento zero, a função retornará True. Se o valor de $arg 1 for uma cadeia de caracteres de comprimento zero e o valor de $arg 2 não for uma cadeia de caracteres de comprimento zero, a função retornará False.
Se o valor de $arg 1 ou $arg 2 for a sequência vazia, o argumento será tratado como a cadeia de caracteres de comprimento zero.
A função contains() usa a ordenação de ponto de código Unicode padrão do XQuery para a comparação de cadeias de caracteres.
O valor da subcadeia de caracteres especificado para $arg 2 deve ser menor ou igual a 4000 caracteres. Se o valor especificado for maior que 4000 caracteres, ocorrerá uma condição de erro dinâmico e a função contains() retornará uma sequência vazia em vez de um valor booleano de True ou False. O SQL Server não gera erros dinâmicos em expressões XQuery.
Para obter comparações que não diferenciam maiúsculas de minúsculas, as funções maiúsculas ou minúsculas podem ser usadas.
Caracteres suplementares (pares substitutos)
O comportamento de pares substitutos em funções XQuery depende do nível de compatibilidade do banco de dados e, em alguns casos, o URI do namespace padrão para funções. Para obter mais informações, consulte a seção "As funções XQuery reconhecem substitutos" no tópico Alterações significativas nos recursos do Mecanismo de Banco de Dados no SQL Server 2016. Consulte também Nível de compatibilidade ALTER DATABASE (Transact-SQL) e Suporte a ordenação e Unicode.
Exemplos
Este tópico fornece exemplos de XQuery em relação a instâncias XML armazenadas em várias colunas do tipo xml no banco de dados AdventureWorks.
R. Usando a função contains() XQuery para pesquisar uma cadeia de caracteres específica
A consulta a seguir localiza produtos que contêm a palavra Aerodynamic nas descrições resumidas. A consulta retorna o ProductID e o <Summary
> elemento para esses produtos.
--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
Resultados
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>