En MariaDB, LOCATE()
es una función de cadena integrada que devuelve la posición de la primera aparición de una subcadena dentro de otra cadena.
LOCATE()
es similar al INSTR()
función, excepto que LOCATE()
ofrece la opción de especificar una posición inicial para la búsqueda. Además, el orden de los argumentos se invierte entre estas dos funciones.
Sintaxis
El LOCATE()
La función admite una sintaxis de dos argumentos y una sintaxis de tres argumentos.
Sintaxis de dos argumentos:
LOCATE(substr,str)
Sintaxis de tres argumentos:
LOCATE(substr,str,pos)
Donde str
es la cadena, substr
es la subcadena a buscar, y pos
es la posición para iniciar la búsqueda.
Ejemplo
He aquí un ejemplo básico:
SELECT LOCATE('hot', 'The hot sun');
Resultado:
+------------------------------+ | LOCATE('hot', 'The hot sun') | +------------------------------+ | 5 | +------------------------------+
Posición inicial
Este es un ejemplo de proporcionar una posición inicial para la búsqueda:
SELECT LOCATE('hot', 'The hot sun is really hot', 8);
Resultado:
+------------------------------------------------+ | LOCATE('hot', 'The hot sun is really hot', 8) | +------------------------------------------------+ | 23 | +------------------------------------------------+
Sensibilidad de mayúsculas y minúsculas
LOCATE()
realiza una búsqueda que no distingue entre mayúsculas y minúsculas:
SELECT LOCATE('HOT', 'The hot sun');
Resultado:
+------------------------------+ | LOCATE('HOT', 'The hot sun') | +------------------------------+ | 5 | +------------------------------+
Ocurrencias Múltiples
Si la subcadena aparece más de una vez, solo se devuelve la posición de la primera (desde la posición inicial):
SELECT LOCATE('hot', 'The hot sun is really hot');
Resultado:
+--------------------------------------------+ | LOCATE('hot', 'The hot sun is really hot') | +--------------------------------------------+ | 5 | +--------------------------------------------+
Aquí está con una posición inicial:
SELECT LOCATE('hot', 'The hot sun is really hot', 20);
Resultado:
+------------------------------------------------+ | LOCATE('hot', 'The hot sun is really hot', 20) | +------------------------------------------------+ | 23 | +------------------------------------------------+
Coincidencia parcial
Si la subcadena es parte de una palabra más grande, sigue siendo una coincidencia:
SELECT LOCATE('hot', 'The hottest sun');
Resultado:
+----------------------------------+ | LOCATE('hot', 'The hottest sun') | +----------------------------------+ | 5 | +----------------------------------+
Pero si la cadena es solo parte de la subcadena, no es una coincidencia:
SELECT LOCATE('hottest', 'The hot sun');
Resultado:
+----------------------------------+ | LOCATE('hottest', 'The hot sun') | +----------------------------------+ | 0 | +----------------------------------+
Espacios
El carácter de espacio sigue siendo una cadena, por lo que podemos incluir espacios en la subcadena, incluso si es el único carácter:
SELECT LOCATE(' ', 'The hot sun');
Resultado:
+----------------------------+ | LOCATE(' ', 'The hot sun') | +----------------------------+ | 4 | +----------------------------+
Cadena vacía
Esto es lo que sucede cuando la subcadena es una cadena vacía:
SELECT LOCATE('', 'The hot sun');
Resultado:
+---------------------------+ | LOCATE('', 'The hot sun') | +---------------------------+ | 1 | +---------------------------+
Sin coincidencia
Si la subcadena no se encuentra en la cadena, LOCATE()
devuelve 0
:
SELECT LOCATE('cold', 'The hot sun');
Resultado:
+-------------------------------+ | LOCATE('cold', 'The hot sun') | +-------------------------------+ | 0 | +-------------------------------+
Argumentos nulos
Proporcionar null
para cualquiera de los resultados de los argumentos en null
:
SELECT
LOCATE(null, 'The hot sun'),
LOCATE('hot', null);
Resultado:
+-----------------------------+---------------------+ | LOCATE(null, 'The hot sun') | LOCATE('hot', null) | +-----------------------------+---------------------+ | NULL | NULL | +-----------------------------+---------------------+
Proporcionar el número incorrecto de argumentos
Llamando a LOCATE()
con el número incorrecto de argumentos, o sin pasar ningún argumento da como resultado un error:
SELECT LOCATE('hot');
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LOCATE'