Muchos RDBMS tienen un INSTR() función que nos permite encontrar una subcadena dentro de una cadena. Algunos (como MySQL y MariaDB) también tienen un LOCATE() función y una POSITION() función (también compatible con PostgreSQL), que hace algo similar.
SQL Server no tiene un INSTR() función. Tampoco tiene un LOCATE() o POSITION() función. Pero tiene el CHARINDEX() función que hace lo mismo.
SQL Server también tiene el PATINDEX() función, que hace un trabajo similar a CHARINDEX() .
El CHARINDEX() Función
Aquí hay un ejemplo de CHARINDEX() función:
SELECT CHARINDEX('news', 'No news is good news'); Resultado:
4
La función acepta un tercer argumento que nos permite especificar dónde comenzar la búsqueda:
SELECT CHARINDEX('news', 'No news is good news', 5); Resultado:
17
En este ejemplo, comenzamos la búsqueda en la posición 5, que fue después del inicio de la primera aparición de news , por lo que devolvió la posición de la segunda ocurrencia.
El PATINDEX() Función
El PATINDEX() la función es similar a CHARINDEX() , excepto que nos permite buscar un patrón, en lugar de una cadena específica.
He aquí un ejemplo para ilustrar lo que quiero decir:
SELECT PATINDEX('%ew%', 'No news is good news'); Resultado:
5
Esto es lo que sucede si elimino los caracteres comodín:
SELECT PATINDEX('ew', 'No news is good news'); Resultado:
0
Ver PATINDEX() vs CHARINDEX() para obtener más información sobre las diferencias entre estas dos funciones.