No SQL Server, você pode usar o T-SQL
CHARINDEX()
ou a função PATINDEX()
função para encontrar uma string dentro de outra string. Aqui está uma visão geral rápida de cada função. A função CHARINDEX()
Esta função aceita 3 argumentos; a string a ser localizada, a string a ser pesquisada e uma posição inicial opcional.
O
CHARINDEX()
sintaxe fica assim:CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
Onde expressionToFind é a expressão que você deseja encontrar na outra string e expressionToSearch é a outra cadeia. O opcional start_location pode ser usado para especificar uma posição dentro de expressionToSearch para começar a procurar.
Observe que apenas a posição da primeira ocorrência é retornada.
Exemplo
Aqui está um exemplo:
SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.');
Resultado:
1
Neste exemplo, o primeiro argumento é
Bob
, o que significa que estamos pesquisando o segundo argumento para Bob
. O resultado é 1 porque essa é a posição em que Bob
aparece primeiro no segundo argumento. Você também pode notar que
Bob
na verdade, aparece duas vezes na string, mas apenas a posição da primeira correspondência é retornada. Sem correspondência
Se o segundo argumento não contiver
Bob
o resultado teria sido 0
. SELECT CHARINDEX('Kate', 'Bob likes beer. Bob also likes beef.');
Resultado:
0
Especificando uma posição inicial
Você pode especificar uma posição inicial para onde começar a pesquisa. Isso significa que o SQL Server ignorará qualquer ocorrência anterior a essa posição inicial. No entanto, os resultados ainda são relatados com base em sua posição na string (não na posição inicial).
Se isso parece confuso, o exemplo a seguir deve ajudar:
SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.', 16);
Resultado:
17
Portanto, neste exemplo, começamos a pesquisar na posição 16 (que é o espaço antes do 2º
Bob
). O resultado é que a primeira ocorrência de Bob
é ignorado e a posição do segundo é retornada. E podemos ver que sua posição é de 17 caracteres desde o início da string (mesmo sendo apenas um caractere de onde começamos a busca). Sensibilidade a maiúsculas e minúsculas
Você pode executar explicitamente uma pesquisa com distinção entre maiúsculas e minúsculas adicionando a cláusula COLLATE à sua instrução SELECT:
Sensibilidade a maiúsculas e minúsculas
Aqui está uma pesquisa que diferencia maiúsculas de minúsculas:
SELECT CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CS_AS);
Resultado:
0
Isso diferencia maiúsculas de minúsculas porque
_CS
significa sensível a maiúsculas e minúsculas. Não diferencia maiúsculas de minúsculas
E aqui está uma pesquisa que não diferencia maiúsculas de minúsculas:
SELECT CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CI_AS);
Resultado:
11
Isso não diferencia maiúsculas de minúsculas porque
_CI
significa Case-Insensitive. A função PATINDEX()
O
PATINDEX()
função faz um trabalho semelhante a CHARINDEX()
. Você basicamente tem uma escolha de qual usar. A principal diferença está na sintaxe. O
PATINDEX()
a sintaxe da função é assim:PATINDEX ( '%pattern%' , expression )
Onde padrão é uma expressão de caracteres que contém a sequência a ser encontrada e expressão é a expressão a ser pesquisada (normalmente uma coluna).
O
PATINDEX()
aceita caracteres curinga, mas não uma posição inicial. CHARINDEX()
por outro lado, aceita uma posição inicial, mas não caracteres curinga. Exemplos
Aqui está um exemplo:
SELECT PATINDEX('%eer%', 'Bob likes beer.');
Resultado:
12
No entanto, aqui está o que acontece quando não incluímos os caracteres curinga:
SELECT PATINDEX('eer', 'Bob likes beer.');
Resultado:
0
Aqui está outro exemplo em que introduzimos outro caractere curinga:
SELECT PATINDEX('%b_er%', 'Bob likes beer.');
Resultado:
11
Neste caso, o sublinhado (
_
) que é um curinga para qualquer caractere único.