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

Cómo funciona la función LOCATE() en MySQL

En MySQL, LOCATE() La función devuelve la posición de una subcadena dentro de una cadena. Más específicamente, devuelve 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.

Sintaxis

Se puede utilizar de cualquiera de las siguientes formas:

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

Donde substr es la subcadena a localizar, y str es la cadena a buscar.

Al usar la segunda sintaxis, pos es la posición para comenzar a buscar.

Ejemplo 1:primera sintaxis

Aquí hay un ejemplo usando la primera sintaxis:

SELECT LOCATE('cat', 'One cat jumped over the other cat') AS Result;

Resultado:

+--------+
| Result |
+--------+
|      5 |
+--------+

Ejemplo 2:segunda sintaxis

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

SELECT LOCATE('cat', 'One cat jumped over the other cat', 6) AS Result;

Resultado:

+--------+
| Result |
+--------+
|     31 |
+--------+

En este caso, la primera aparición de cat comienza en la posición 5, pero especifiqué que la búsqueda comenzara en la posición 6. Por lo tanto, la posición de la siguiente aparición de esa cadena fue la que se devolvió.

Tenga en cuenta que, aunque la búsqueda comenzó en la posición 6, la función aún devuelve la posición de la subcadena dentro de la cadena, no desde la posición inicial.

Aquí hay otro ejemplo para ayudar a aclarar esto.

SELECT 
  LOCATE('c', 'a b c', 1) AS 'Result 1',
  LOCATE('c', 'a b c', 2) AS 'Result 2',
  LOCATE('c', 'a b c', 4) AS 'Result 3';

Resultado:

+----------+----------+----------+
| Result 1 | Result 2 | Result 3 |
+----------+----------+----------+
|        5 |        5 |        5 |
+----------+----------+----------+

El resultado es el mismo sin importar dónde comencemos a buscar.

Ejemplo 3:localizar parte de una palabra

La subcadena puede ser parte de una palabra más larga:

SELECT LOCATE('sing', 'Increasingly') AS Result;

Resultado:

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

De hecho, no es necesario que sea una palabra (después de todo, simplemente buscamos una cadena):

SELECT 
  LOCATE('z23!#', 'u_4, z23!#') AS 'Result 1',
  LOCATE(' ', 'a b c') AS 'Result 2',
  LOCATE(',', 'cat, dog, bird') AS 'Result 3';

Resultado:

+----------+----------+----------+
| Result 1 | Result 2 | Result 3 |
+----------+----------+----------+
|        6 |        2 |        4 |
+----------+----------+----------+

Ejemplo 4:Sin coincidencias

Si no se encuentra la subcadena, 0 se devuelve:

SELECT LOCATE('Bat', 'Increasingly') AS Result;

Resultado:

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

Ejemplo 5:Sensibilidad entre mayúsculas y minúsculas

Esta función es segura para varios bytes y distingue entre mayúsculas y minúsculas solo si al menos un argumento es una cadena binaria.

Por lo tanto, lo siguiente funciona en cadenas no binarias, aunque las mayúsculas y minúsculas no coincidan:

SELECT LOCATE('Sing', 'Increasingly') AS Result;

Resultado:

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

Pero si usamos una cadena binaria, sucede esto:

SET @str = BINARY 'Increasingly'; 
SELECT LOCATE('Sing', @str) AS Result;

Resultado:

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

Pero, por supuesto, si lo cambiamos para que coincidan las mayúsculas y minúsculas, obtenemos una coincidencia:

SET @str = BINARY 'Increasingly'; 
SELECT LOCATE('sing', @str) AS Result;

Resultado:

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

Ejemplo 6:Argumentos NULL

Si alguno de los argumentos es NULL , NULO se devuelve:

SELECT 
  LOCATE(NULL, 'Increasingly') a,
  LOCATE('Bat', NULL) b,
  LOCATE('Bat', 'Increasingly', NULL) c;

Resultado:

+------+------+------+
| a    | b    | c    |
+------+------+------+
| NULL | NULL | NULL |
+------+------+------+