banco de dados.Guia

no servidor SQL, você pode usar a função T-SQL PATINDEX() para encontrar um padrão dentro de uma cadeia de caracteres. Especificamente, a função só retorna a primeira ocorrência do padrão dentro da string.

a função aceita dois argumentos; o padrão e a cadeia de caracteres.

pode usar caracteres especiais dentro do padrão.

sintaxe

a sintaxe é assim:

PATINDEX ( '%pattern%' , expression )

where pattern is a character expression that contains the sequence to be found, and expression is the expression to be searched.

Exemplo 1 – Uso Básico

Aqui está um exemplo de como funciona:

SELECT PATINDEX('%eer%', 'Bob likes beer.') AS Result;

Resultado:

+----------+| Result ||----------|| 12 |+----------+

O sinal de percentagem (%) é um caractere curinga que representa qualquer seqüência de zero ou mais caracteres.

Exemplo 2 – nenhuma correspondência

Aqui está o que acontece quando não incluímos os caracteres especiais:

SELECT PATINDEX('eer', 'Bob likes beer.') AS Result;

Resultado:

+----------+| Result ||----------|| 0 |+----------+

Apesar de que, se a cadeia completa o padrão de correspondência, sem qualquer curingas, você receberá uma correspondência:

SELECT PATINDEX('Bob', 'Bob') AS Result;

Resultado:

+----------+| Result ||----------|| 1 |+----------+

no Entanto, você não vai obter um resultado se a seqüência de caracteres contém mais caracteres:

SELECT PATINDEX('Bob', 'Bob likes beer.') AS Result;

Resultado:

+----------+| Result ||----------|| 0 |+----------+

nesse caso, você poderia usar um curinga:

SELECT PATINDEX('Bob%', 'Bob likes beer.') AS Result;

Resultado:

+----------+| Result ||----------|| 1 |+----------+

Você também pode usar um curinga em algum lugar no meio do padrão:

SELECT PATINDEX('B%r.', 'Bob likes beer.') AS Result;

Resultado:

+----------+| Result ||----------|| 1 |+----------+

neste caso temos um jogo, porque o início e o fim da seqüência de caracteres de correspondência de início e final do padrão. Claro, o meio da cadeia também correspondia ao meio do padrão, porque todos os outros caracteres são cobertos pelo sinal percentual.

exemplo 3-a sequência de caracteres especiais

Aqui está outro exemplo em que introduzimos outro carácter de caracteres especiais:

SELECT PATINDEX('B_er', 'Beer') AS Result;

Resultado:

+----------+| Result ||----------|| 1 |+----------+

O carácter de sublinhado (_), que é um curinga para qualquer caractere único. Portanto, só vai corresponder se houver exactamente um personagem nessa posição.

claro, o padrão acima pode corresponder a muitas cadeias de caracteres diferentes. Por exemplo:

SELECT PATINDEX('B_er', 'Beer') AS 'Beer', PATINDEX('B_er', 'Bier') AS 'Bier', PATINDEX('B_er', 'Baer') AS 'Baer', PATINDEX('B_er', 'B er') AS 'B er';

resultado:

+--------+--------+--------+--------+| Beer | Bier | Baer | B er ||--------+--------+--------+--------|| 1 | 1 | 1 | 1 |+--------+--------+--------+--------+

Exemplo 4 – Comparando a _ e % Curingas

Este exemplo demonstra a diferença entre o _ e % caracteres curinga.

SELECT PATINDEX('B%r', 'Beer') AS '%', PATINDEX('B_r', 'Beer') AS '_', PATINDEX('B__r', 'Beer') AS '__';

resultado:

+-----+-----+------+| % | _ | __ ||-----+-----+------|| 1 | 0 | 1 |+-----+-----+------+

o sublinhado só corresponde quando há exactamente um carácter nessa posição. Para combinar dois caracteres, precisamos de usar dois subconjuntos.

O sinal percentual, por outro lado, corresponde a qualquer número de caracteres, incluindo zero, como se vê no exemplo seguinte::

SELECT PATINDEX('Bee%r', 'Beer') AS '%', PATINDEX('Bee_r', 'Beer') AS '_', PATINDEX('Bee__r', 'Beer') AS '__';

Resultado:

+-----+-----+------+| % | _ | __ ||-----+-----+------|| 1 | 0 | 0 |+-----+-----+------+

Exemplo 5 – Um Exemplo de Banco de dados

Aqui está um exemplo de como usar esta função em uma consulta de banco de dados:

USE Music;SELECT AlbumName, PATINDEX('%the%', AlbumName) AS 'Pattern Index'FROM AlbumsWHERE PATINDEX('%the%', AlbumName) > 0;

Resultado:

+-------------------------+-----------------+| AlbumName | Pattern Index ||-------------------------+-----------------|| Singing Down the Lane | 14 || Ziltoid the Omniscient | 9 || No Prayer for the Dying | 15 || The Sixteen Men of Tain | 1 |+-------------------------+-----------------+

neste caso eu uso o WHERE cláusula para retornar apenas os álbuns que, na verdade, corresponde, juntamente com o seu PATINDEX() resultado. Se eu deixasse cair a cláusula WHERE, todos os álbuns teriam sido devolvidos, independentemente de corresponderem ou não.

para aqueles que não coincidem, o resultado de PATINDEX() seria zero.

USE Music;SELECT TOP(10) AlbumName, PATINDEX('%the%', AlbumName) AS 'Pattern Index'FROM Albums;

Resultado:

+-------------------------+-----------------+| AlbumName | Pattern Index ||-------------------------+-----------------|| Powerslave | 0 || Powerage | 0 || Singing Down the Lane | 14 || Ziltoid the Omniscient | 9 || Casualties of Cool | 0 || Epicloud | 0 || Somewhere in Time | 0 || Piece of Mind | 0 || Killers | 0 || No Prayer for the Dying | 15 |+-------------------------+-----------------+

Exemplo 6 – Primeira Ocorrência Apenas

Como mencionado, PATINDEX() retorna somente a primeira ocorrência do padrão dentro da cadeia.

SELECT PATINDEX('%and%', 'Bob and beer and popcorn.') AS Result;

Resultado:

+----------+| Result ||----------|| 5 |+----------+

A Função CHARINDEX ()

O T-SQL CHARINDEX() função é semelhante a PATINDEX(). No entanto, existem algumas diferenças entre os dois. Em particular, o PATINDEX() aceita caracteres especiais, mas não uma posição inicial. CHARINDEX() por outro lado, aceita uma posição inicial, mas não caracteres especiais.

Related Posts

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *