MariaDB tiene un INSTR()
función y también un LOCATE()
función. Ambas funciones parecen hacer exactamente lo mismo:devolver la posición de una subcadena dentro de una cadena.
Sin embargo, hay una diferencia.
Las diferencias
Podemos ver la diferencia entre estas dos funciones mirando su sintaxis, así como un par de ejemplos.
Sintaxis
La sintaxis de INSTR()
:
INSTR(str,substr)
Las dos sintaxis aceptadas para LOCATE()
:
LOCATE(substr,str)
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.
La diferencia entre las dos funciones se puede resumir de la siguiente manera:
- El
LOCATE()
La función acepta los mismos dos argumentos queINSTR()
acepta, pero en orden inverso.
- El
LOCATE()
La función acepta un tercer argumento opcional para especificar la posición inicial de la búsqueda. ElINSTR()
la función no acepta tal argumento.
Entonces LOCATE()
proporciona una funcionalidad adicional que INSTR()
no proporciona
Ejemplo 1:la primera diferencia
Aquí hay un ejemplo que muestra el orden inverso en el que las dos funciones aceptan sus argumentos:
SELECT
INSTR('Disconnect', 'con'),
LOCATE('con', 'Disconnect');
Resultado:
+----------------------------+-----------------------------+ | INSTR('Disconnect', 'con') | LOCATE('con', 'Disconnect') | +----------------------------+-----------------------------+ | 4 | 4 | +----------------------------+-----------------------------+
Ejemplo 2:la segunda diferencia
Aquí hay un ejemplo que muestra la funcionalidad extra que LOCATE()
proporciona sobre INSTR()
:
SELECT
INSTR('My cat is a good cat', 'cat') AS "INSTR()",
LOCATE('cat', 'My cat is a good cat') AS "LOCATE()",
LOCATE('cat', 'My cat is a good cat', 10) AS "LOCATE() with 3rd Argument";
Resultado:
+---------+----------+----------------------------+ | INSTR() | LOCATE() | LOCATE() with 3rd Argument | +---------+----------+----------------------------+ | 4 | 4 | 18 | +---------+----------+----------------------------+
Este ejemplo destaca el hecho de que LOCATE()
función nos proporciona un tercer argumento opcional. Este argumento nos permite especificar una posición inicial para la búsqueda, lo que significa que no estamos limitados solo a la primera aparición en toda la cadena.