[SQL] MySQL의 LIKE IN ()?
SQLMySQL의 LIKE IN ()?
나의 현재 쿼리는 다음과 같습니다 :
SELECT * FROM fiberbox f WHERE f.fiberBox LIKE '%1740 %' OR f.fiberBox LIKE '%1938 %' OR f.fiberBox LIKE '%1940 %'
좀 둘러보고하고 LIKE IN ()와 유사한 아무것도 찾을 수 없습니다 않았다 - 나는 그것이 같은 작업을 구상 :
SELECT * FROM fiberbox f WHERE f.fiberbox LIKE IN('%140 %', '%1938 %', '%1940 %')
어떤 아이디어? 내가 본 적이 몇 가지 모호한 명령 - 오전 난 그냥 문제를 잘못된 방향으로 생각.
MySQL은 5.0.77-지역 로그
해결법
-
==============================
1.regexp와보다 효율적으로 될 수도 있지만 당신은 할 벤치 마크가 거라고 확신, 예를 들어,
regexp와보다 효율적으로 될 수도 있지만 당신은 할 벤치 마크가 거라고 확신, 예를 들어,
SELECT * from fiberbox where field REGEXP '1740|1938|1940';
-
==============================
2.폴 딕슨의 대답은 나를 위해 훌륭하게 일했다. 이에 추가하려면, 여기에 내가 정규 표현식을 사용하는 데 관심이있는 사람들의 관찰 사항은 다음과 같습니다
폴 딕슨의 대답은 나를 위해 훌륭하게 일했다. 이에 추가하려면, 여기에 내가 정규 표현식을 사용하는 데 관심이있는 사람들의 관찰 사항은 다음과 같습니다
와일드 카드 여러 LIKE 필터를 달성하기 위해 :
SELECT * FROM fiberbox WHERE field LIKE '%1740 %' OR field LIKE '%1938 %' OR field LIKE '%1940 %';
사용 정규 표현식 대안 :
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |1940 ';
REGEXP 따옴표 내와 사이의 값 | (OR) 연산자는 와일드 카드로서 취급된다. 일반적으로, 정규 표현식은 다음과 같은 와일드 카드 표현이 필요합니다. (*) 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';
사용 정규 표현식 대안 :
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 필터 별도의 설정하지 분리. 나는 그래서 앞으로, 부정 패턴을 사용하여 패턴을 찾고, 그리고 실험. 그러나 이러한 표현은 원하는 결과를 산출하지 않은 것으로 보입니다. 위의 첫 번째 예제에서는 일치를 나타 내기 위해 ^ 9999 $를 사용합니다. 이 같은 표현에서 와일드 카드 일치와 특정 일치를 추가 할 수 있습니다. 나열된 두 번째 예에서 볼 수 그러나, 당신은 또한 문 이러한 유형을 혼합 할 수 있습니다.
성능에 관해서는, 나는 기존의 테이블에 대해 약간의 테스트를 실행하고 내 변화 사이의 차이를 찾을 수 없습니다. 그러나, 나는 성능이 더 큰 데이터베이스, 더 큰 필드 큰 레코드 수 및 더 복잡한 필터에 문제가 될 수 상상한다.
언제나처럼, 그것은 의미가 위와 같이 사용하는 논리.
정규 표현식에 대한 자세한 내용을 원한다면, 나는 좋은 참고 사이트와 www.regular-expressions.info 좋습니다.
-
==============================
3.당신은 인라인 뷰 또는 임시 테이블을 만들려면 값을 작성하고이를 실행할 수 있습니다 :
당신은 인라인 뷰 또는 임시 테이블을 만들려면 값을 작성하고이를 실행할 수 있습니다 :
SELECT * FROM fiberbox f JOIN ( SELECT '%1740%' AS cond UNION ALL SELECT '%1938%' AS cond UNION ALL SELECT '%1940%' AS cond ) с ON f.fiberBox LIKE cond
이 쿼리가 더 나은 서비스를 맞을 수 있도록 이것은, 그러나, '1938 1740'과 같이있는 fiberbox 당신에게 여러 행을 반환 할 수 있습니다 :
SELECT * FROM fiberbox f WHERE EXISTS ( SELECT 1 FROM ( SELECT '%1740%' AS cond UNION ALL SELECT '%1938%' AS cond UNION ALL SELECT '%1940%' AS cond ) с WHERE f.fiberbox LIKE cond )
-
==============================
4.값 목록에 정규 표현식 방법
값 목록에 정규 표현식 방법
SELECT * FROM table WHERE field regexp concat_ws("|", "111", "222", "333");
-
==============================
5.죄송합니다, MySQL의에서 LIKE IN과 비슷한 조작은 없습니다.
죄송합니다, MySQL의에서 LIKE IN과 비슷한 조작은 없습니다.
당신이 가입없이 LIKE 연산자를 사용하려는 경우, 당신은 이런 식으로해야 할 것이다 :
(field LIKE value OR field LIKE value OR field LIKE value)
당신은 MySQL이 참고로, 해당 쿼리를 최적화하지 않습니다 알고있다.
-
==============================
6.정규 표현식을 시도하는 사람에게 그냥 메모 "LIKE IN"기능을 사용할 수 있습니다.
정규 표현식을 시도하는 사람에게 그냥 메모 "LIKE IN"기능을 사용할 수 있습니다.
IN은 당신이 할 수 있습니다 :
field IN ( 'val1', 'val2', 'val3' )
정규 표현식이 작동하지 않습니다
REGEXP ' val1$| val2$| val3$ '
그것은이 같은 한 줄에 있어야한다 :
REGEXP 'val1$|val2$|val3$'
-
==============================
7.플립 피연산자
플립 피연산자
'a,b,c' like '%'||field||'%'
-
==============================
8.이것은 올바른 것입니다 :
이것은 올바른 것입니다 :
SELECT * FROM table WHERE field regexp concat_ws("|",( "111", "222", "333" ));
-
==============================
9.그냥 약간의 팁 :
그냥 약간의 팁 :
나는 그것이 더 자연 언어 같은 소리, 그리고 짧은으로 변형 RLIKE (정규 표현식과 정확히 동일한 명령)을 사용하는 것을 선호; 물론, 단지 한 문자.
은 "R"접두사는 등록을위한 것입니다. 특급. 물론.
-
==============================
10.당신은 정규 표현식의 도움으로 결과를 원하는 얻을 수 있습니다.
당신은 정규 표현식의 도움으로 결과를 원하는 얻을 수 있습니다.
SELECT fiberbox from fiberbox where fiberbox REGEXP '[1740|1938|1940]';
우리는 위의 쿼리를 테스트 할 수 있습니다 SQL 바이올린을 클릭 해주세요
SELECT fiberbox from fiberbox where fiberbox REGEXP '[174019381940]';
우리는 위의 쿼리를 테스트 할 수 있습니다 SQL 바이올린을 클릭 해주세요
from https://stackoverflow.com/questions/1127088/mysql-like-in by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 날짜의 범위와 테이블을 채우는? (0) | 2020.03.10 |
---|---|
[SQL] 왜 NULL = NULL은 SQL 서버에서 false로 평가 않습니다 (0) | 2020.03.10 |
[SQL] SQL에서 100 년 달력 테이블을 만드는 방법 [마감] (0) | 2020.03.10 |
[SQL] MySQL의 쿼리의 FROM 절에서 오류가 발생 WHERE에 열 별칭을 사용하여 (0) | 2020.03.10 |
[SQL] SQL Server의 계산 중간에 기능 (0) | 2020.03.10 |