W MySQL możesz użyć funkcji FIND_IN_SET()
funkcja do zwrócenia indeksu danej pozycji listy w liście ciągów (na przykład ‘item1, item2, item3,…’).
Funkcja przyjmuje dwa argumenty; ciąg do znalezienia i listę do przeszukania.
Składnia wygląda tak:
FIND_IN_SET(str,strlist)
Gdzie str
to ciąg, którego szukasz, a strlist
to lista ciągów do przeszukiwania.
Przykład
Oto przykład:
SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse') AS 'Result';
Wynik:
+--------+ | Result | +--------+ | 2 | +--------+
Zwraca 2
ponieważ to jest pozycja ciągu Dog
na liście ciągów.
Zauważ, że zwracany jest tylko indeks pierwszego wystąpienia. Więc jeśli było inne wystąpienie Dog
po tym pierwszym i tak otrzymalibyśmy ten sam wynik:
SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse,Dog') AS 'Result';
Wynik:
+--------+ | Result | +--------+ | 2 | +--------+
Brak dopasowań
Gdy ciąg nie zostanie znaleziony, wynik 0
jest zwracany:
SELECT FIND_IN_SET('Lizard', 'Cat,Dog,Horse') AS 'Result';
Wynik:
+--------+ | Result | +--------+ | 0 | +--------+
A co, jeśli pierwszy argument zawiera przecinek?
Funkcja nie zwróci pozytywnego wyniku, jeśli pierwszy argument zawiera przecinek.
Oto przykład:
SELECT FIND_IN_SET('Cat,Dog', 'Cat,Dog,Horse') AS 'Result';
Wynik:
+--------+ | Result | +--------+ | 0 | +--------+
W tym przykładzie można by oczekiwać, że zwróci wynik pozytywny (biorąc pod uwagę Cat,Dog
znajduje się na liście), jednak przecinek jest używany jako separator na liście, a zatem dopasowanie ciągu nie działa.
Zobacz także Jak zwrócić pozycję argumentu na liście argumentów za pomocą FIELD()
funkcja.