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. Para obtener más información, vea Coincidencias de patrón en condiciones de búsqueda.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

PATINDEX ( '%pattern%' , expression )

Argumentos

  • 'pattern'
    Es una expresión de caracteres 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).

  • expression
    Es una expresión, normalmente una columna en la que se busca el patrón especificado. expression es de la categoría de 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); en caso 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.

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 AdventureWorks2008R2;
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 en las que buscar con la cláusula WHERE, la consulta devolverá todas las filas de la tabla e indicará valores distintos de cero para las filas en las que se haya encontrado el patrón y cero para el resto.

B. Utilizar caracteres comodín con PATINDEX

En el ejemplo siguiente se utilizan caracteres comodín para encontrar la posición en la que comienza el patrón en_ure en una fila específica de la columna DocumentSummary de la tabla Document, donde el carácter de subrayado es un comodín que representa cualquier carácter.

USE AdventureWorks2008R2;
GO
SELECT PATINDEX('%en_ure%', 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 en las que buscar, la consulta devolverá todas las filas de la tabla e indicará valores distintos de cero para las filas en las que haya encontrado el patrón.

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. Utilizar una variable para especificar el modelo

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

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

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

El conjunto de resultados es el siguiente.

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

22