Compartir a través de


PATINDEX (Transact-SQL)

Devuelve la posición inicial de la primera repetición de un patrón en la expresión especificada, o ceros si el patrón no se encuentra, en todos los tipos de datos de texto y caracteres.

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL

Sintaxis

PATINDEX ( '%pattern%' , expression )

Argumentos

  • pattern
    Es una expresión de carácter que contiene la secuencia que se va a buscar. Se pueden usar caracteres comodín; sin embargo, el carácter % debe ir delante y detrás de pattern (a menos que busque el primer o el último carácter). pattern es una expresión de la categoría del tipo de datos de cadena de caracteres. pattern tiene un límite de 8000 caracteres.

  • expression
    Es una expresión, normalmente una columna en la que se busca el patrón especificado. expression es del tipo de datos de cadena de caracteres.

Tipos de valor devueltos

bigint si expression es de los tipos de datos varchar(max) o nvarchar(max); de lo contrario, int.

Comentarios

Si pattern o expression es NULL, PATINDEX devuelve NULL.

PATINDEX realiza comparaciones basadas en la intercalación de la entrada. Para realizar una comparación de una intercalación especificada, puede utilizar COLLATE para aplicar una intercalación explícita a la entrada.

Caracteres adicionales (pares suplentes)

Cuando se usan intercalaciones SC, el valor devuelto contará cualquier par suplente UTF-16 en el parámetro expression como un solo carácter. Para obtener más información, vea Compatibilidad con la intercalación y Unicode.

0x0000 (char(0)) es un carácter no definido en las intercalaciones de Windows y no se puede incluir en PATINDEX.

Ejemplos

A.Utilizar un patrón con PATINDEX

En el siguiente ejemplo se busca la posición en que comienza el patrón ensure en una fila específica de la columna DocumentSummary de la tabla Document.

USE AdventureWorks2012;
GO
SELECT PATINDEX('%ensure%',DocumentSummary)
FROM Production.Document
WHERE DocumentNode = 0x7B40;
GO 

El conjunto de resultados es el siguiente.

-----------

64

(1 row(s) affected)

Si no restringe las filas que se van a buscar mediante una cláusula WHERE, la consulta devuelve todas las filas de la tabla e informa de valores distintos de cero para las filas en las que se encontró el modelo, y cero para todas las filas en las que no se encontró el modelo.

B.Utilizar caracteres comodín con PATINDEX

En el siguiente ejemplo se utilizan los caracteres comodín % y _ para buscar la posición en la que comienza el modelo 'en' en la cadena especificada, seguido de cualquier carácter y 'ure' (el índice comienza en 1):

  SELECT PATINDEX('%en_ure%', 'please ensure the door is locked');
 

El conjunto de resultados es el siguiente.

------------

8

PATINDEX funciona igual que LIKE, por lo que se puede usar cualquiera de los caracteres comodín. No es necesario incluir el partrón entre caracteres de porcentaje. PATINDEX('a%', 'abc') devuelve 1 y PATINDEX('%a', 'cba') devuelve 3.

A diferencia de LIKE, PATINDEX devuelve una posición, de forma similar a CHARINDEX.

C.Utilizar COLLATE con PATINDEX

En el siguiente ejemplo se utiliza la función COLLATE para especificar de forma explícita la intercalación de la expresión que se está buscando.

USE tempdb;
GO
SELECT PATINDEX ( '%ein%', 'Das ist ein Test'  COLLATE Latin1_General_BIN) ;
GO

D.Usar una variable para especificar el patrón

En el ejemplo siguiente se utiliza una variable para pasar un valor al parámetro pattern.

USE AdventureWorks2012; 
GO
DECLARE @MyValue varchar(10) = 'safety'; 

SELECT PATINDEX('%' + @MyValue + '%', DocumentSummary) 
FROM Production.Document
WHERE DocumentNode = 0x7B40;

El conjunto de resultados es el siguiente.

------------

22

Vea también

Referencia

Tipos de datos (Transact-SQL)

Funciones de cadena (Transact-SQL)

[ ] (caracteres comodín para búsqueda de coincidencias de Transact-SQL)

[^] (comodín - carácter o caracteres no coincidentes) (Transact-SQL)

_ (comodín, coincidir un carácter) (Transact-SQL)

Carácter de porcentaje (caracteres comodín para coincidir) (Transact-SQL)