CHARINDEX (Transact-SQL)

Busca otra expresión y devuelve su posición inicial si se encuentra.

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

Sintaxis

CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )

Argumentos

  • expressionToFind
    Es una expresión de caracteres que contiene la secuencia que se va a buscar. expressionToFind tiene un límite de 8000 caracteres.

  • expressionToSearch
    Expresión de caracteres que se va a buscar.

  • start_location
    Expresión integer o bigint donde se inicia la búsqueda. Si no se especifica el parámetro start_location, es un número negativo o es igual a cero, la búsqueda comienza al principio de expressionToSearch.

Tipos de valor devueltos

bigint si expressionToSearch es de tipo varchar(max), nvarchar(max) o varbinary(max); de lo contrario, int.

Comentarios

Si uno de los parámetros expressionToFind o expressionToSearch es de tipo de datos Unicode (nvarchar o nchar) y el otro no, la expresión que no sea de tipo Unicode se convierte en Unicode. CHARINDEX no se puede usar con los tipos de datos text, ntext e image.

Si expressionToFind o expressionToSearch es NULL, CHARINDEX devuelve NULL.

Si expressionToFind no se encuentra en expressionToSearch, CHARINDEX devuelve 0.

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

La posición inicial devuelta es de base 1, no de base 0.

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

Caracteres adicionales (pares suplentes)

Al utilizar intercalaciones de SC, start_location y el valor devuelto cuentan los pares suplentes como un carácter, no como dos. Para obtener más información, vea Compatibilidad con la intercalación y Unicode.

Ejemplos

A.Devolver la posición inicial de una expresión

El siguiente ejemplo devuelve la posición en la que empieza la secuencia de caracteres bicycle en la columna DocumentSummary de la tabla Document.

USE AdventureWorks2012;
GO
DECLARE @document varchar(64);

SELECT @document = 'Reflectors are vital safety' +
                   ' components of your bicycle.';
SELECT CHARINDEX('bicycle', @document);
GO

El conjunto de resultados es el siguiente.

----------- 
48          

B.Buscar desde una posición concreta

En el siguiente ejemplo se utiliza el parámetro opcional start_location para empezar la búsqueda de vital en el quinto carácter de la columna DocumentSummary.

USE AdventureWorks2012;
GO
DECLARE @document varchar(64);

SELECT @document = 'Reflectors are vital safety' +
                   ' components of your bicycle.';
SELECT CHARINDEX('vital', @document, 5);
GO

El conjunto de resultados es el siguiente.

----------- 
16          

(1 row(s) affected)

C.Buscar una expresión inexistente

En el siguiente ejemplo se muestra el conjunto de resultados cuando el parámetro expressionToFind no se encuentra en expressionToSearch.

USE AdventureWorks2012;
GO
DECLARE @document varchar(64);

SELECT @document = 'Reflectors are vital safety' +
                   ' components of your bicycle.';
SELECT CHARINDEX('bike', @document);
GO

El conjunto de resultados es el siguiente.

-----------

0

(1 row(s) affected)

D.Realizar una búsqueda con distinción de mayúsculas y minúsculas

En el siguiente ejemplo se realiza una búsqueda con distinción de mayúsculas y minúsculas de la cadena 'TEST' en 'Das ist ein Test'.

USE tempdb;
GO
--perform a case sensitive search
SELECT CHARINDEX ( 'TEST',
       'Das ist ein Test'
       COLLATE Latin1_General_CS_AS);

El conjunto de resultados es el siguiente.

-----------

0

En el siguiente ejemplo se realiza una búsqueda con distinción de mayúsculas y minúsculas de la cadena 'Test' en 'Das ist ein Test'.

USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
       'Das ist ein Test'
       COLLATE Latin1_General_CS_AS);

El conjunto de resultados es el siguiente.

-----------

13

E.Realizar una búsqueda sin distinción de mayúsculas y minúsculas

En el siguiente ejemplo se realiza una búsqueda sin distinción de mayúsculas y minúsculas de la cadena 'TEST' en 'Das ist ein Test'.

USE tempdb;
GO
SELECT CHARINDEX ( 'TEST',
       'Das ist ein Test'
       COLLATE Latin1_General_CI_AS)
GO

El conjunto de resultados es el siguiente.

-----------

13

Vea también

Referencia

Funciones de cadena (Transact-SQL)

+ (Concatenación de cadenas) (Transact-SQL)

Conceptos

Compatibilidad con la intercalación y Unicode