In MySQL, you can use the FIND_IN_SET()
function to return the index of a given list item within a string list (for example ‘item1, item2, item3,…’).
The function takes two arguments; the string to find, and the list to search.
The syntax goes like this:
FIND_IN_SET(str,strlist)
Where str
is the the string you’re looking for, and strlist
is the string list to search through.
Example
Here’s an example:
SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse') AS 'Result';
Result:
+--------+ | Result | +--------+ | 2 | +--------+
This returns 2
because that’s the position of the string Dog
within the string list.
Note that only the index of the first occurrence is returned. So if there was another occurrence of Dog
after that first one, we’d still get the same result:
SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse,Dog') AS 'Result';
Result:
+--------+ | Result | +--------+ | 2 | +--------+
No Matches
When the string isn’t found, a result of 0
is returned:
SELECT FIND_IN_SET('Lizard', 'Cat,Dog,Horse') AS 'Result';
Result:
+--------+ | Result | +--------+ | 0 | +--------+
What if the First Argument contains a Comma?
The function won’t return a positive result if the first argument contains a comma.
Here’s an example:
SELECT FIND_IN_SET('Cat,Dog', 'Cat,Dog,Horse') AS 'Result';
Result:
+--------+ | Result | +--------+ | 0 | +--------+
In this example, one might expect it to return a positive result (given Cat,Dog
is actually in the list), however, the comma is used as a separator in the list, and therefore, the string match doesn’t work.
Also see How to Return an Argument’s Position within a List of Arguments by using the FIELD()
function.