폴 딕슨의 대답은 저에게 훌륭하게 작용했습니다. 여기에 REGEXP 사용에 관심이있는 사람들이 관찰 한 사항이 있습니다.
와일드 카드로 여러 LIKE 필터를 달성하려면 다음을 수행하십시오.
SELECT * FROM fiberbox WHERE field LIKE '%1740 %'
OR field LIKE '%1938 %'
OR field LIKE '%1940 %';
REGEXP 대안 사용 :
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |1940 ';
REGEXP 따옴표 안의 값과 | (또는) 연산자는 와일드 카드로 취급됩니다. 일반적으로 REGEXP는 % 1740 %로 작동하려면 (. *) 1740 (. *)과 같은 와일드 카드식이 필요합니다.
와일드 카드 배치를보다 세밀하게 제어해야하는 경우 다음 변형 중 일부를 사용하십시오.
제어 된 와일드 카드 배치로 LIKE를 달성하려면 다음을 수행하십시오.
SELECT * FROM fiberbox WHERE field LIKE '1740 %'
OR field LIKE '%1938 '
OR field LIKE '%1940 % test';
사용하다:
SELECT * FROM fiberbox WHERE field REGEXP '^1740 |1938 $|1940 (.*) test';
특정 일치 항목의 범위를 좁히는 더 효율적인 방법이 있지만 정규 표현식을 더 많이 검토해야합니다. 참고 : 모든 정규식 패턴이 MySQL 문에서 작동하는 것으로 보이지는 않습니다. 패턴을 테스트하고 효과가 있는지 확인해야합니다.
마지막으로 여러 개의 LIKE 및 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';
REGEXP 대안 사용 :
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |^9999$'
OR field NOT REGEXP '1940 |^test ';
또는 혼합 대안 :
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 '
OR field NOT REGEXP '1940 |^test '
OR field NOT LIKE 'test %'
OR field = '9999';
별도의 WHERE 필터에서 NOT 설정을 분리했습니다. 부정적 패턴, 미래 지향적 패턴 등을 사용하여 실험했습니다. 그러나 이러한 표현은 원하는 결과를 얻지 못했습니다. 위의 첫 번째 예에서는 ^ 9999 $를 사용하여 정확하게 일치 함을 나타냅니다. 이렇게하면 동일한 식에서 와일드 카드 일치를 사용하여 특정 일치를 추가 할 수 있습니다. 그러나 나열된 두 번째 예에서 볼 수 있듯이 이러한 유형의 명령문을 혼합 할 수도 있습니다.
성능과 관련하여 기존 테이블에 대해 몇 가지 사소한 테스트를 실행했으며 변형간에 차이가 없었습니다. 그러나 더 큰 데이터베이스, 더 큰 필드, 더 많은 레코드 수 및 더 복잡한 필터에서는 성능이 문제가 될 수 있다고 생각합니다.
항상 그렇듯이 위의 논리를 사용하는 것이 좋습니다.
정규식에 대한 자세한 내용을 보려면 www.regular-expressions.info를 좋은 참조 사이트로 권장합니다.
WHERE FIND_IN_SET(f.fiberbox, "1740,1938,1940")