2012-09-14 3 views

답변

1
SELECT * FROM t WHERE c LIKE '%(__)%' 

SQL 바이올린 here

+0

'()'사이에 두 개의 한자가있는 경우를 놓칩니다. – qazwsx

+0

실제로 작동하지만 영어 괄호에만 적용됩니다. 중국인의 경우'(__)'는 어떻게됩니까? – qazwsx

+0

'LIKE'는 괄호 사이에 하나 또는 두 개의 멀티 바이트 문자를 제대로 처리하지 못할 수도 있지만 멀티 바이트 괄호 문자 자체 (U + FF08 및 U + FF09)에는 문제가 없어야합니다. LIKE 패턴의 리터럴 값 –

0

탈옥이 해제되었습니다.

http://dev.mysql.com/doc/refman/5.0/en/regexp.html#operator_regexp

MySQL은, 당신이 당신의 정규 표현식 문자열에서 사용하는 "\"를 두 배로해야한다 ("\ n"은 줄 바꿈 문자를 표현하기 위해, 예를 들어) 문자열의 C 이스케이프 구문을 사용하기 때문에 .

사용 :

SELECT * FROM t WHERE c REGEXP '.*\\(..\\).*'; 
+0

사이에 라틴 문자에 대한이 유일한 작품'()'내가 그 사례를 찾을 필요가 있다면 무엇을 어디에'의 두 문자()'중국어 예를 들어, 비 라틴하다 문자? – qazwsx

+0

할 수 있는지 확실하지 않습니다. "경고 REGEXP 및 RLIKE 연산자는 바이트 단위로 작동하므로 멀티 바이트 안전하지 않으며 멀티 바이트 문자 집합과 함께 예기치 않은 결과가 발생할 수 있으며 이러한 연산자는 바이트 값으로 문자를 비교하고 악센트 부호가있는 문자가 주어진 데이터 정렬이 그것들을 동등하게 취급한다고해도 동등한 것으로 비교되지 않습니다. " http://dev.mysql.com/doc/refman/5.0/en/regexp.html – Kos

+1

가능한 경우'like'를 사용하십시오. @ Fred의 대답 – Kos

-1

방법이 쿼리를 실행? 당신이 PHP 스크립트 (예를 들어)에서 사용하고있는 경우이처럼 쓰기 : 다음

$sql = "SELECT ... REGEXP '.*\(..\).*';"; 

는 PHP 인터프리터가 실제로 그 백 슬래시를 제거한다, 실제 쿼리

... REGEXP '.*(..).*'; 

을 생산 단순히 적어도 두 개의 문자가있는 레코드 일뿐입니다. 이 제대로 작동하려면 이중 이스케이프해야합니다 :

$sql = "SELECT ... REGEXP '.*\\(..\\).*';"; 

PHP는 각 세트에서 백 슬래시 중 하나를 제거합니다, 실제로 MySQL의에 도달하기 위해 두 번째를 떠나.

+0

은 PHP가 아닌이 슬래시를 제거하는 MySQL 구문 분석기입니다. PHP에서'echo '\ (asdf \)';'를 시도하십시오. 슬래시가 여전히 있습니다. – Kos

관련 문제