CHARINDEX (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de análisis SQL en Microsoft FabricAlmacenamiento en Microsoft Fabric

Esta función busca una expresión de caracteres dentro de una segunda expresión de caracteres, y devuelve la posición inicial de la primera expresión si se encuentra.

Convenciones de sintaxis de Transact-SQL

Sintaxis

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )   

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulta la Documentación de versiones anteriores.

Argumentos

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

expressionToSearch
Una expresión de caracteres que se va a buscar.

start_location
Una expresión integer o bigint donde empieza la búsqueda. Si no se especifica start_location, tiene un valor negativo o un valor cero (0), la búsqueda empieza al principio de expressionToSearch.

Tipos de valores devueltos

bigint si expressionToSearch tiene el tipo de datos nvarchar(max) , varbinary(max) o varchar(max) ; int en caso contrario.

Observaciones

Si expressionToFind o expressionToSearch tiene un tipo de datos Unicode (nchar o nvarchar) y la otra expresión no, la función CHARINDEX convierte esa otra expresión a un tipo de datos Unicode. CHARINDEX no se puede usar con los tipos de datos image, ntext o text.

Si expressionToFind o expressionToSearch tiene un valor NULL, CHARINDEX devuelve NULL.

Si CHARINDEX no encuentra expressionToFind dentro de expressionToSearch, devuelve 0.

CHARINDEX realiza comparaciones en función de intercalación de entrada. Para realizar una comparación de una intercalación especificada, use 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 usar intercalaciones de SC, start_location y el valor devuelto cuentan los pares suplentes como un carácter, no como dos. Para más información, consulte Compatibilidad con la intercalación y Unicode.

Ejemplos

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

Este ejemplo se busca bicycle en la variable de valor de cadena de búsqueda @document.

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 este ejemplo se usa el parámetro opcional ubicación_inicial para empezar la búsqueda de vital en el quinto carácter de la variable de valor de cadena de búsqueda @document.

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 este ejemplo se muestra el conjunto de resultados cuando CHARINDEX no encuentra expressionToFind dentro de 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)

En este ejemplo se muestra una búsqueda con distinción de mayúsculas y minúsculas de la cadena 'TEST' en la cadena de búsqueda '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 este ejemplo se muestra una búsqueda con distinción de mayúsculas y minúsculas de la cadena 'Test' en 'This is a Test'.

  
USE tempdb;  
GO  
SELECT CHARINDEX ( 'Test',  
       'This is a Test'  
       COLLATE Latin1_General_CS_AS);  

El conjunto de resultados es el siguiente:

-----------
11

En este ejemplo se muestra una búsqueda sin distinción de mayúsculas y minúsculas de la cadena 'TEST' en 'This is a Test'.

USE tempdb;  
GO  
SELECT CHARINDEX ( 'TEST',  
       'This is a Test'  
       COLLATE Latin1_General_CI_AS);  
GO  

El conjunto de resultados es el siguiente:

-----------
11

Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)

F. Buscar desde el principio de una expresión de cadena

En este ejemplo se devuelve la primera ubicación de la cadena is en la cadena This is a string, empezando por la posición 1 (el primer carácter) de This is a string.

SELECT CHARINDEX('is', 'This is a string');  

El conjunto de resultados es el siguiente:

---------
3

G. Buscar desde una posición distinta de la primera posición

En este ejemplo se devuelve la primera ubicación de la cadena is en la cadena This is a string, empezando por la posición 4 (el cuarto carácter).

SELECT CHARINDEX('is', 'This is a string', 4);  

El conjunto de resultados es el siguiente:

---------
 6

H. Resultados cuando no se encuentra la cadena

En este ejemplo se muestra el valor devuelto cuando CHARINDEX no encuentra la cadena patrón_de_cadena en la cadena buscada.

SELECT TOP(1) CHARINDEX('at', 'This is a string') FROM dbo.DimCustomer;  

El conjunto de resultados es el siguiente:

---------
0

Consulte también

LEN (Transact-SQL)
PATINDEX (Transact-SQL)
String Functions (Transact-SQL) [Funciones de cadena (Transact-SQL)]
+ (Concatenación de cadenas) (Transact-SQL)
Compatibilidad con la intercalación y Unicode