Mysql
 sql >> Database >  >> RDS >> Mysql

Come restituire la posizione di una voce di elenco in MySQL

In MySQL, puoi usare FIND_IN_SET() funzione per restituire l'indice di un determinato elemento di un elenco all'interno di un elenco di stringhe (ad esempio 'elemento1, elemento2, elemento3,...').

La funzione accetta due argomenti; la stringa da trovare e l'elenco da cercare.

La sintassi è questa:

FIND_IN_SET(str,strlist)

Dove str è la stringa che stai cercando e strlist è l'elenco di stringhe in cui eseguire la ricerca.

Esempio

Ecco un esempio:

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

Risultato:

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

Questo restituisce 2 perché quella è la posizione della stringa Dog nell'elenco delle stringhe.

Si noti che viene restituito solo l'indice della prima occorrenza. Quindi se ci fosse un'altra occorrenza di Dog dopo il primo, otterremmo sempre lo stesso risultato:

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

Risultato:

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

Nessuna corrispondenza

Quando la stringa non viene trovata, un risultato di 0 viene restituito:

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

Risultato:

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

Cosa succede se il primo argomento contiene una virgola?

La funzione non restituirà un risultato positivo se il primo argomento contiene una virgola.

Ecco un esempio:

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

Risultato:

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

In questo esempio, ci si potrebbe aspettare che restituisca un risultato positivo (dato Cat,Dog è effettivamente nell'elenco), tuttavia, la virgola viene utilizzata come separatore nell'elenco e, pertanto, la corrispondenza della stringa non funziona.

Vedi anche Come restituire la posizione di un argomento all'interno di un elenco di argomenti utilizzando il FIELD() funzione.