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.