A resposta de Paul Dixon funcionou brilhantemente para mim. Para adicionar isso, aqui estão algumas coisas que observei para os interessados em usar o REGEXP:
Para realizar vários filtros LIKE com caracteres curinga:
SELECT * FROM fiberbox WHERE field LIKE '%1740 %'
OR field LIKE '%1938 %'
OR field LIKE '%1940 %';
Use a alternativa REGEXP:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |1940 ';
Valores entre aspas REGEXP e entre os | (OR) são tratados como curingas. Normalmente, o REGEXP exigirá expressões curinga como (. *) 1740 (. *) Para funcionar como% 1740%.
Se você precisar de mais controle sobre o posicionamento do curinga, use algumas destas variantes:
Para realizar o LIKE com o posicionamento curinga controlado:
SELECT * FROM fiberbox WHERE field LIKE '1740 %'
OR field LIKE '%1938 '
OR field LIKE '%1940 % test';
Usar:
SELECT * FROM fiberbox WHERE field REGEXP '^1740 |1938 $|1940 (.*) test';
Colocar ^ na frente do valor indica o início da linha.
Colocar $ após o valor indica o fim da linha.
A colocação (. *) Se comporta como o curinga%.
O . indica qualquer caractere único, exceto quebras de linha. Colocação. inside () com * (. *) adiciona um padrão de repetição indicando qualquer número de caracteres até o final da linha.
Existem maneiras mais eficientes de restringir correspondências específicas, mas isso requer mais revisão das Expressões Regulares. NOTA: Nem todos os padrões de expressão regular parecem funcionar nas instruções do MySQL. Você precisará testar seus padrões e ver o que funciona.
Por fim, para realizar vários filtros LIKE e 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';
Use a alternativa REGEXP:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |^9999$'
OR field NOT REGEXP '1940 |^test ';
OU Alternativa mista:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 '
OR field NOT REGEXP '1940 |^test '
OR field NOT LIKE 'test %'
OR field = '9999';
Observe que eu separei o conjunto NOT em um filtro WHERE separado. Eu experimentei usar padrões de negação, padrões de previsão e assim por diante. No entanto, essas expressões não parecem produzir os resultados desejados. No primeiro exemplo acima, eu uso ^ 9999 $ para indicar a correspondência exata. Isso permite adicionar correspondências específicas com correspondências curinga na mesma expressão. No entanto, você também pode misturar esses tipos de instruções, como você pode ver no segundo exemplo listado.
Em relação ao desempenho, executei alguns testes menores em uma tabela existente e não encontrei diferenças entre minhas variações. No entanto, imagino que o desempenho possa ser um problema com bancos de dados maiores, campos maiores, maior número de registros e filtros mais complexos.
Como sempre, use a lógica acima, pois faz sentido.
Se você quiser aprender mais sobre expressões regulares, recomendo www.regular-expressions.info como um bom site de referência.
WHERE FIND_IN_SET(f.fiberbox, "1740,1938,1940")