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

Cómo devolver la posición de un elemento de lista en MySQL

En MySQL, puede usar FIND_IN_SET() función para devolver el índice de un elemento de lista dado dentro de una lista de cadenas (por ejemplo, 'elemento1, elemento2, elemento3,...').

La función toma dos argumentos; la cadena a buscar y la lista a buscar.

La sintaxis es así:

FIND_IN_SET(str,strlist)

Donde str es la cadena que está buscando y strlist es la lista de cadenas para buscar.

Ejemplo

He aquí un ejemplo:

SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse') AS 'Result';

Resultado:

+--------+
| Result |
+--------+
|      2 |
+--------+

Esto devuelve 2 porque esa es la posición de la cadena Dog dentro de la lista de cadenas.

Tenga en cuenta que solo se devuelve el índice de la primera aparición. Entonces, si hubiera otra ocurrencia de Dog después de ese primero, obtendríamos el mismo resultado:

SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse,Dog') AS 'Result';

Resultado:

+--------+
| Result |
+--------+
|      2 |
+--------+

Sin coincidencias

Cuando no se encuentra la cadena, un resultado de 0 se devuelve:

SELECT FIND_IN_SET('Lizard', 'Cat,Dog,Horse') AS 'Result';

Resultado:

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

¿Qué sucede si el primer argumento contiene una coma?

La función no devolverá un resultado positivo si el primer argumento contiene una coma.

He aquí un ejemplo:

SELECT FIND_IN_SET('Cat,Dog', 'Cat,Dog,Horse') AS 'Result';

Resultado:

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

En este ejemplo, se podría esperar que arrojara un resultado positivo (dado Cat,Dog está realmente en la lista), sin embargo, la coma se usa como separador en la lista y, por lo tanto, la coincidencia de cadenas no funciona.

Consulte también Cómo devolver la posición de un argumento dentro de una lista de argumentos usando FIELD() función.