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.