La respuesta de Paul Dixon funcionó brillantemente para mí. Para agregar a esto, aquí hay algunas cosas que observé para aquellos interesados en usar REGEXP:
Para lograr múltiples filtros LIKE con comodines:
SELECT * FROM fiberbox WHERE field LIKE '%1740 %'
OR field LIKE '%1938 %'
OR field LIKE '%1940 %';
Utilice la alternativa REGEXP:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |1940 ';
Valores dentro de comillas REGEXP y entre | El operador (OR) se trata como comodines. Normalmente, REGEXP requerirá expresiones comodín como (. *) 1740 (. *) Para funcionar como% 1740%.
Si necesita más control sobre la ubicación del comodín, use algunas de estas variantes:
Para lograr LIKE con la colocación de comodines controlados:
SELECT * FROM fiberbox WHERE field LIKE '1740 %'
OR field LIKE '%1938 '
OR field LIKE '%1940 % test';
Utilizar:
SELECT * FROM fiberbox WHERE field REGEXP '^1740 |1938 $|1940 (.*) test';
Colocar ^ delante del valor indica el inicio de la línea.
Colocar $ después del valor indica el final de la línea.
Colocar (. *) Se comporta como el comodín%.
Los . indica cualquier carácter individual, excepto los saltos de línea. Colocación inside () con * (. *) agrega un patrón repetitivo que indica cualquier número de caracteres hasta el final de la línea.
Hay formas más eficientes de reducir coincidencias específicas, pero eso requiere una mayor revisión de las expresiones regulares. NOTA: No todos los patrones de expresiones regulares parecen funcionar en las declaraciones de MySQL. Tendrá que probar sus patrones y ver qué funciona.
Finalmente, para lograr múltiples filtros LIKE y NOT LIKE:
SELECT * FROM fiberbox WHERE field LIKE '%1740 %'
OR field LIKE '%1938 %'
OR field NOT LIKE '%1940 %'
OR field NOT LIKE 'test %'
OR field = '9999';
Utilice la alternativa REGEXP:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |^9999$'
OR field NOT REGEXP '1940 |^test ';
O Alternativa Mixta:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 '
OR field NOT REGEXP '1940 |^test '
OR field NOT LIKE 'test %'
OR field = '9999';
Observe que separé el conjunto NO en un filtro WHERE separado. Experimenté con el uso de patrones de negación, patrones prospectivos, etc. Sin embargo, estas expresiones no parecían producir los resultados deseados. En el primer ejemplo anterior, uso ^ 9999 $ para indicar la coincidencia exacta. Esto le permite agregar coincidencias específicas con coincidencias comodín en la misma expresión. Sin embargo, también puede mezclar este tipo de declaraciones como puede ver en el segundo ejemplo que se enumera.
Con respecto al rendimiento, realicé algunas pruebas menores en una tabla existente y no encontré diferencias entre mis variaciones. Sin embargo, imagino que el rendimiento podría ser un problema con bases de datos más grandes, campos más grandes, mayores recuentos de registros y filtros más complejos.
Como siempre, use la lógica anterior, ya que tiene sentido.
Si desea obtener más información sobre las expresiones regulares, le recomiendo www.regular-expressions.info como un buen sitio de referencia.
WHERE FIND_IN_SET(f.fiberbox, "1740,1938,1940")