Debido a un desarrollo en el que actualmente trabajo, me tope con esto que resulto ser muy sencillo de hacer, pero no esta tan documentado como se espera. Que pasa si tienes un campo con cadenas de texto o enteros separados por coma, como categorías, nombres etc.

Un ejemplo practico seria,  el campo “cats” tiene un contenido como ’2,11,10,1,16′, si usamos el tradicional LIKE:

SELECT * FROM tabla WHERE cats LIKE '1';

Se podría pensar que esta solución es adecuada pero no es así, ya que nos devolvera:

cats:

  • 11
  • 10
  • 1
  • 16

Para lograr obtener solo el ’1′ y no todos los números que contengan el ’1′ se debe utilizar esta sintaxis:

SELECT * FROM tabla WHERE FIND_IN_SET('1', cats)

En el ejemplo práctico ‘tabla’ es el nombre de la tabla en la que queremos buscar y ‘cats’ el nombre del campo.

 

Fuente: http://www.thezilus.com/blog/

 

PS. Dependiendo del tipo de separacion se podria usar una expresion regular

SELECT * FROM tutabla WHERE servicios REGEXP '[[:<:]]12[[:>:]]';

En el caso, de separas con comas, te recomendaría la consulta de FIND_IN_SET por ser más eficiente.
Pero si separaras con espacios en blanco, o algún otro signo que no fuera la coma, tendrías que usar la expresión regular.