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.