PATINDEX (Transact-SQL)PATINDEX (Transact-SQL)

SE APLICA A: síSQL Server síAzure SQL Database síAzure SQL Data Warehouse síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

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.Returns the starting position of the first occurrence of a pattern in a specified expression, or zeros if the pattern is not found, on all valid text and character data types.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

PATINDEX ( '%pattern%' , expression )  

ArgumentosArguments

patternpattern
Es una expresión de carácter que contiene la secuencia que se va a buscar.Is a character expression that contains the sequence to be found. 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).Wildcard characters can be used; however, the % character must come before and follow pattern (except when you search for first or last characters). pattern es una expresión de la categoría del tipo de datos de cadena de caracteres.pattern is an expression of the character string data type category. pattern tiene un límite de 8000 caracteres.pattern is limited to 8000 characters.

expressionexpression
expression es una expresión, normalmente una columna en la que se busca el patrón especificado.Is an expression, typically a column that is searched for the specified pattern. expression es de la categoría del tipo de datos de cadena de caracteres.expression is of the character string data type category.

Tipos devueltosReturn Types

bigint si expression es de los tipos de datos varchar(max) o nvarchar(max) ; en caso contrario, int.bigint if expression is of the varchar(max) or nvarchar(max) data types; otherwise int.

NotasRemarks

Si pattern o expression son NULL, PATINDEX devuelve NULL.If either pattern or expression is NULL, PATINDEX returns NULL.

La posición inicial de PATINDEX es 1.The starting position for PATINDEX is 1.

PATINDEX realiza comparaciones basadas en la intercalación de la entrada.PATINDEX performs comparisons based on the collation of the input. Para realizar una comparación de una intercalación especificada, puede utilizar COLLATE para aplicar una intercalación explícita a la entrada.To perform a comparison in a specified collation, you can use COLLATE to apply an explicit collation to the input.

Caracteres adicionales (pares suplentes)Supplementary Characters (Surrogate Pairs)

Cuando se usan intercalaciones SC, el valor devuelto contará cualquier par suplente UTF-16 en el parámetro expression como un solo carácter.When using SC collations, the return value will count any UTF-16 surrogate pairs in the expression parameter as a single character. Para más información, consulte Compatibilidad con la intercalación y Unicode.For more information, see Collation and Unicode Support.

0x0000 (char(0) ) es un carácter no definido en las intercalaciones de Windows y no se puede incluir en PATINDEX.0x0000 (char(0)) is an undefined character in Windows collations and cannot be included in PATINDEX.

EjemplosExamples

A.A. Ejemplo sencillo de PATINDEXSimple PATINDEX example

En este ejemplo se comprueba una cadena corta de caracteres (interesting data) para la ubicación inicial de los caracteres ter.The following example checks a short character string (interesting data) for the starting location of the characters ter.

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

El conjunto de resultados es el siguiente.Here is the result set.

3

B.B. Utilizar un patrón con PATINDEXUsing a pattern with 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 de la base de datos AdventureWorks2012AdventureWorks2012.The following example finds the position at which the pattern ensure starts in a specific row of the DocumentSummary column in the Document table in the AdventureWorks2012AdventureWorks2012 database.

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

El conjunto de resultados es el siguiente.Here is the result set.

-----------  
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.If you do not restrict the rows to be searched by using a WHERE clause, the query returns all rows in the table and reports nonzero values for those rows in which the pattern was found, and zero for all rows in which the pattern was not found.

C.C. Utilizar caracteres comodín con PATINDEXUsing wildcard characters with 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):The following example uses % and _ wildcards to find the position at which the pattern 'en', followed by any one character and 'ure' starts in the specified string (index starts at 1):

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

El conjunto de resultados es el siguiente.Here is the result set.

-----------  
8  

PATINDEX funciona igual que LIKE, por lo que se puede usar cualquiera de los caracteres comodín.PATINDEX works just like LIKE, so you can use any of the wildcards. No es necesario incluir el patrón entre caracteres de porcentaje.You do not have to enclose the pattern between percents. PATINDEX('a%', 'abc') devuelve 1 y PATINDEX('%a', 'cba') devuelve 3.PATINDEX('a%', 'abc') returns 1 and PATINDEX('%a', 'cba') returns 3.

A diferencia de LIKE, PATINDEX devuelve una posición, de forma similar a CHARINDEX.Unlike LIKE, PATINDEX returns a position, similar to what CHARINDEX does.

D.D. Utilizar COLLATE con PATINDEXUsing COLLATE with 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.The following example uses the COLLATE function to explicitly specify the collation of the expression that is searched.

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

E.E. Usar una variable para especificar el patrónUsing a variable to specify the pattern

En este ejemplo se usa una variable para pasar un valor al parámetro pattern.The following example uses a variable to pass a value to the pattern parameter. Aquí se usa la base de datos AdventureWorks2012AdventureWorks2012.This example uses the AdventureWorks2012AdventureWorks2012 database.

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

El conjunto de resultados es el siguiente.Here is the result set.

------------  
22

Consulte tambiénSee Also

LIKE (Transact-SQL) LIKE (Transact-SQL)
CHARINDEX (Transact-SQL)CHARINDEX (Transact-SQL)
LEN (Transact-SQL)LEN (Transact-SQL)
Tipos de datos (Transact-SQL) Data Types (Transact-SQL)
Funciones de cadena (Transact-SQL) String Functions (Transact-SQL)
(Wildcard - Character(s) to Match) (Transact-SQL) [(Carácter comodín - Caracteres coincidentes (Transact-SQL)](Wildcard - Character(s) to Match) (Transact-SQL)
(Wildcard - Character(s) to Match) (Transact-SQL) [(Carácter comodín - Caracteres no coincidentes (Transact-SQL)](Wildcard - Character(s) Not to Match) (Transact-SQL)
_ (Wildcard - Match One Character) (Transact-SQL) [_ (Carácter comodín - Coincidir con un carácter) (Transact-SQL)]_ (Wildcard - Match One Character) (Transact-SQL)
Percent character (Wildcard - Character(s) to Match) (Transact-SQL) [Carácter de porcentaje (Carácter comodín - Caracteres coincidentes Transact-SQL)]Percent character (Wildcard - Character(s) to Match) (Transact-SQL)