PATINDEX (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Punto de conexión de análisis SQL en Microsoft Fabric Almacenamiento en Microsoft Fabric

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.

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, pero 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.

Nota

Aunque las expresiones regulares tradicionales no se admiten de forma nativa en SQL Server, se puede lograr una coincidencia de patrones complejos similar mediante el uso de varias expresiones comodín. Consulte la documentación Operadores de cadena para obtener más información sobre la sintaxis de los caracteres comodín.

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

Tipos de valor devuelto

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

Comentarios

Si pattern o expression son NULL, PATINDEX devuelve NULL.

La posición inicial de PATINDEX es 1.

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 más información, consulte 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. Ejemplo sencillo de PATINDEX

En este ejemplo se comprueba una cadena corta de caracteres (interesting data) para la ubicación inicial de los caracteres ter.

SELECT position = PATINDEX('%ter%', 'interesting data');  

Este es el conjunto de resultados.

position
--------
3

B. Utilizar un patrón con PATINDEX

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

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

Este es el conjunto de resultados.

position
--------  
64  

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.

C. 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 position = PATINDEX('%en_ure%', 'Please ensure the door is locked!');  

Este es el conjunto de resultados.

position
--------  
8  

PATINDEX funciona igual que LIKE, por lo que se puede usar cualquiera de los caracteres comodín. No es necesario incluir el patró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.

D. Uso de expresiones de caracteres comodín complejos con PATINDEX

En el ejemplo siguiente se usa el operador de cadena [^] para buscar la posición de un carácter que no es un número, una letra o un espacio.

SELECT position = PATINDEX('%[^ 0-9A-Za-z]%', 'Please ensure the door is locked!'); 

Este es el conjunto de resultados.

position
--------
33

E. 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  

Este es el conjunto de resultados.

position
--------
9

F. Usar una variable para especificar el patrón

En este ejemplo se usa una variable para pasar un valor al parámetro pattern. En este ejemplo se usa la base de datos AdventureWorks2022.

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

Este es el conjunto de resultados.

position
--------  
22

Consulte también

LIKE (Transact-SQL)
CHARINDEX (Transact-SQL)
LEN (Transact-SQL)
Tipos de datos (Transact-SQL)
String Functions (Transact-SQL) [Funciones de cadena (Transact-SQL)]
(caracteres comodín para coincidir) (Transact-SQL)
(caracteres comodín para no coincidir) (Transact-SQL)
_ (comodín, coincidir un carácter) (Transact-SQL)
Carácter de porcentaje (caracteres comodín para coincidir) (Transact-SQL)