sql >> Base de Datos >  >> RDS >> Mysql

3 formas de encontrar la posición de una subcadena dentro de una cadena en MySQL

MySQL tiene una serie de funciones de cadena que devuelven la posición de una subcadena dentro de una cadena. Más específicamente, devuelven la posición de la primera aparición dentro de la cadena (o la primera aparición después de un punto de inicio dado).

Las funciones a las que me refiero son las siguientes:

  • INSTR()
  • LOCATE()
  • POSITION()

A continuación se muestra una descripción general de cada uno.

INSTR()

El INSTR() La función devuelve la primera aparición de una subcadena dentro de una cadena.

Aquí está la sintaxis:

INSTR(str,substr)

Donde str es la cadena que desea buscar y substr es la subcadena que está buscando.

Ejemplo

SELECT INSTR('Cats and dogs like to run', 'dogs') AS Result;

Resultado:

+--------+
| Result |
+--------+
|     10 |
+--------+

En este caso, la cadena dogs comienza en la posición 10.

Si no se encuentra la subcadena, un resultado de 0 se devuelve:

SELECT INSTR('Cats and dogs like to run', 'rabbit') AS Result;

Resultado:

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

LOCALIZAR()

El LOCATE() función funciona de manera similar, excepto por un par de diferencias; los argumentos están en un orden diferente y puede proporcionar un tercer parámetro opcional para indicar dónde comenzar a buscar.

Por lo tanto, puede usarlo de una de las siguientes maneras:

LOCATE(substr,str)
LOCATE(substr,str,pos)

La primera sintaxis es como INTSR() sintaxis, excepto que str y substr se intercambian.

La segunda sintaxis agrega el pos opcional argumento, que le permite especificar una posición para comenzar a buscar.

Ejemplo de primera sintaxis

Aquí hay un ejemplo usando la primera sintaxis:

SELECT LOCATE('dogs', 'Cats and dogs like to run') AS Result;

Resultado:

+--------+
| Result |
+--------+
|     10 |
+--------+

Ejemplo de segunda sintaxis

Aquí hay un ejemplo donde especificamos una posición de inicio para comenzar a buscar:

SELECT LOCATE('cat', 'Cats, cats, and more cats!', 6) AS Result;

Resultado:

+--------+
| Result |
+--------+
|      7 |
+--------+

Podemos ver que la cadena cat se puede encontrar en la posición 1, pero especificamos 6 como posición inicial. Por lo tanto, la posición de la siguiente aparición de esa cadena fue la que se devolvió.

Al igual que con el INSTR() función, si no se encuentra la subcadena, 0 es devuelto.

POSICIÓN()

La POSITION() función es un sinónimo de LOCATE() , pero con una sintaxis ligeramente diferente.

Aquí está la sintaxis:

POSITION(substr IN str)

Este es un sinónimo de lo siguiente:

LOCATE(substr,str)

Entonces, podríamos reescribir uno de los ejemplos anteriores de la siguiente manera:

SELECT POSITION('dogs' IN 'Cats and dogs like to run') AS Result;

Resultado:

+--------+
| Result |
+--------+
|     10 |
+--------+