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

INSTR() Equivalente en SQL Server

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.