sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo funciona la función CHARINDEX() en SQL Server (T-SQL)

En SQL Server, puede usar T-SQL CHARINDEX() función para encontrar la posición inicial de una expresión de caracteres dentro de otra expresión de caracteres.

Proporciona ambas expresiones de caracteres como argumentos. También puede proporcionar un argumento opcional para especificar una posición en la que comenzar la búsqueda.

Sintaxis

La sintaxis es así:

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

Donde expresiónParaBuscar es la expresión que desea buscar en la otra cadena y expressionToSearch es la otra cadena. La ubicación_inicial opcional se puede usar para especificar una posición dentro de expressionToSearch por el que empezar a buscar.

Tenga en cuenta que solo se devuelve la posición de la primera aparición.

Ejemplo

He aquí un ejemplo:

SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.') AS Result;

Resultado:

+----------+
| Result   |
|----------|
| 1        |
+----------+

En este ejemplo, el primer argumento es Bob , lo que significa que estamos buscando el segundo argumento para Bob . El resultado es 1 porque esa es la posición donde Bob primero aparece en el segundo argumento.

También puedes notar que Bob en realidad aparece dos veces en la cadena, pero solo se devuelve la posición de la primera coincidencia.

Sin coincidencia

Si el segundo argumento no contenía Bob el resultado hubiera sido 0 .

SELECT CHARINDEX('Bob', 'Kate likes beer. Kate also likes beef.') AS Result;

Resultado:

+----------+
| Result   |
|----------|
| 0        |
+----------+

Especificar una posición inicial

Puede (opcionalmente) especificar una posición inicial para la búsqueda. Esto significa que SQL Server omitirá cualquier aparición anterior a esa posición inicial. Sin embargo, los resultados aún se informan en función de su posición dentro de toda la cadena (no desde la posición inicial elegida).

Aquí hay un ejemplo para demostrarlo:

SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.', 16) AS Result;

Resultado:

+----------+
| Result   |
|----------|
| 17       |
+----------+

En este ejemplo, comenzamos a buscar en la posición 16 (que resulta ser el espacio antes del segundo Bob ). El resultado es que la primera aparición de Bob se salta y se devuelve la posición del segundo. Y podemos ver que su posición es de 17 caracteres desde el comienzo de la cadena (aunque es solo un carácter desde donde comenzamos a buscar).

Sensible a mayúsculas y minúsculas

Puede realizar explícitamente una búsqueda que distinga entre mayúsculas y minúsculas agregando COLLATE cláusula a su SELECT declaración:

Aquí hay un ejemplo que incluye una búsqueda que distingue entre mayúsculas y minúsculas y una búsqueda que no distingue entre mayúsculas y minúsculas:

SELECT 
  CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CS_AS) AS 'Case-Sensitive',
  CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CI_AS) AS 'Case-Insensitive';

Resultado:

+------------------+--------------------+
| Case-Sensitive   | Case-Insensitive   |
|------------------+--------------------|
| 0                | 11                 |
+------------------+--------------------+

El primero distingue entre mayúsculas y minúsculas porque _CS (en la colación) significa Sensible a mayúsculas y minúsculas. El segundo no distingue entre mayúsculas y minúsculas porque _CI significa mayúsculas y minúsculas.