CHARINDEX (Transact-SQL)
Busca otra expresión y devuelve su posición inicial si se encuentra.
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 de la base de datos AdventureWorks2012.
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 de la base de datos AdventureWorks2012.
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.
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 'This is a Test'.
USE tempdb;
GO
--perform a case sensitive search
SELECT CHARINDEX ( 'TEST',
'This is a 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',
'This is a 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',
'This is a 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)