2010-12-27 3 views
0

나는 이웃 이름이 들어있는 필드가있는 테이블이 있습니다. 이 지역 중 일부는 2 개 이상의 단어가있는 이름을 사용합니다. 어떻게하면 3 자 이하의 단어 목록을 얻을 수 있으며 3 단어 이상으로 이름 중간에 나타납니다. 예를 들어MySQL에서 3 자 이하의 단어 검색

:

호수= 아무것도하지 않습니다 만 1 워드
골든 레이크= 아무것도하지 않는다, 단지 2 개의 단어 골드= 추출물의
호수 " "

본질적으로 나는 '쓰레기'단어 목록을 만들고 싶습니다. 메타 폰 문장을 만들 때 제거.

+0

이것은 MySQL에서 어려울 것입니다. 그것의 정규식 구현은 특정 필드가 특정 정규식과 일치하는 행을 선택할 수 있습니다. 따라서 MySQL에서 새 목록을 생성하기 위해 필드의 일부를 추출 할 수 없습니다. 그리고 당신이 할 수있다하더라도, 당신이 원하는 것을 정확히하기위한 lookaround가 필요할 것이고, POSIX regexes는 그것을 지원하지 않습니다. –

답변

3
SELECT 'Lake of gold' RLIKE '[[:<:]].+[[:>:]].+[[:<:]].{1,3}[[:>:]].+[[:<:]].+[[:>:]]' 

불행히도 MySQL은 패턴을 추출하지 않고 정규 표현식과 일치 할 수 있습니다. MySQL에서 필터링을 수행하고 스크립트 측에서 추출해야합니다.

0
SELECT * FROM mytable WHERE mycolumn REGEXP "[[:alnum:]]+[[:space:]]+[[:alnum:]]{1,3}[[:space:]]+[[:alnum:]]+"; 

은 두 단어 사이에 하나 이상의 단어가 최대 3 자까지 포함 된 모든 항목을 찾습니다.

MySQL에서 직접 단어를 추출 할 수는 없지만 관련 행을 필터링합니다. 별도의 단계에서 추출 작업을 수행해야합니다.