Compartir a través de


PATINDEX (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseInstancia administrada de Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de SQL Analytics en Microsoft FabricAlmacén en Microsoft FabricBase de datos SQL en Microsoft Fabric

Devuelve la posición inicial de la primera aparición de un patrón en una expresión especificada, o cero si no se encuentra el patrón, en todos los tipos de datos de texto y caracteres válidos.

Convenciones de sintaxis de Transact-SQL

Syntax

PATINDEX ( '%pattern%' , expression )

Arguments

pattern

Expresión de caracteres que contiene la secuencia que se va a encontrar. Se pueden usar caracteres comodines; sin embargo, el carácter % debe ir antes y seguir el patrón (excepto cuando buscas el primer o último carácter). El patrón es una expresión de la categoría de tipo de dato de cadena de caracteres. El patrón está limitado a 8.000 caracteres.

Note

Aunque las expresiones regulares tradicionales no se admiten de forma nativa en SQL Server 2022 (16.x) y versiones anteriores, se puede lograr una coincidencia de patrones similar compleja mediante varias expresiones comodín. Consulta la documentación de String operators para más detalles sobre la sintaxis de comodines. Para información sobre funciones de expresiones regulares en SQL Server 2025 (17.x), véase Funciones de expresiones regulares.

expression

Una expresión, normalmente una columna, que se busca en el patrón especificado. la expresión pertenece a la categoría de tipo de dato de cadena de caracteres.

Tipos de retorno

bigint if la expresión es de los tipos de datos varchar(max) o nvarchar(max ); Si no , int.

Remarks

Si el patrón es NULL, PATINDEX devuelve NULL.

Si expression es NULL, PATINDEX devuelve un error.

La posición inicial de PATINDEX es 1.

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

Caracteres complementarios (pares suplentes)

Cuando usas colaciones con caracteres suplementarios (SC), el valor de retorno cuenta cualquier par sustituto UTF-16 en el parámetro de expresión como un solo carácter. Para obtener más información, consulte Soporte con 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.

Examples

A. Ejemplo básico de PATINDEX

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

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

Este es el conjunto de resultados.

position
--------
3

B. Uso de un patrón con PATINDEX

El siguiente ejemplo encuentra la posición en la que comienza el patrón ensure en una fila específica de la DocumentSummary columna de la Document tabla en la base de datos AdventureWorks2025.

SELECT PATINDEX('%ensure%', DocumentSummary) AS position
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 WHERE cláusula , la consulta devuelve todas las filas de la tabla e informa de valores distintos de cero para esas filas en las que se encontró el patrón y cero para todas las filas en las que no se encontró el patrón.

C. Uso de 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!') AS position;

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 porcentajes. 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 comodín complejas con PATINDEX

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

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

Este es el conjunto de resultados.

position
--------
33

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

El siguiente ejemplo utiliza una variable para pasar un valor al parámetro del patrón . Este ejemplo utiliza la base de datos AdventureWorks2025.

DECLARE @MyValue AS VARCHAR (10) = 'safety';

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

Este es el conjunto de resultados.

position
--------
22