2013-04-18 3 views
0

데이터베이스에서 세로 파이프로 구분 된 값의 숫자가있는 레코드를 가져 오려고합니다.MySQL LIKE 일치하는 정수 만

나는이처럼 내 쿼리를 가지고 : 그것은 % 5 % LIKE 15 일치되어 그러나

date_end ccode responsible accountable consulted informed 
-6   GB  |6|   |6|   |8|9|15|  |8| 
-6   GB  |6|5|   |6|   |8|   |16| 

는하지만 난 단지 그것을 일치시킬 : 여기

SELECT * FROM level_3 

WHERE 
    date_end = -6 

AND 
    ccode = 'GB' 

AND ( 
    responsible LIKE '%5%' OR 
    accountable LIKE '%5%' OR 
    consulted LIKE '%5%' OR 
    informed LIKE '%5%' 
    ) 

그리고 것은 결과입니다 정확한 숫자. 어떻게이 일을 할 수 있습니까?

SELECT * FROM level_3 

WHERE 
    date_end = -6 

AND 
    ccode = 'GB' 

AND ( 
    responsible LIKE '%|5|%' OR 
    accountable LIKE '%|5|%' OR 
    consulted LIKE '%|5|%' OR 
    informed LIKE '%|5|%' 
    ) 
+4

당신이 할 수있는 경우에, [정상화] 같은 것입니다 (http://en.wikipedia.org/wiki/First_normal_form) 데이터베이스. 하나의 단일 필드에 여러 값을 저장하는 것은 매우 나쁜 습관입니다. – RandomSeed

+0

불행히도 이것은 내 데이터베이스가 아닙니다. 새 행으로 저장된 각 번호와 별도의 테이블을 갖는 것을 의미합니까? – Adam

+0

링크를 통해 읽었을 때 예 : – Adam

답변

3

이 쿼리를 사용해보십시오.

SELECT * FROM level_3 
WHERE date_end = -6 
AND ccode = 'GB' 
AND ( 
    responsible REGEXP '\|[0-9]+\|' OR 
    ... 
) 

(다른 용도 비고 : $을 종료 ^ 시작에서 총 일치에 '^ ... $'를 사용합니다.) 당신이 좋아하는 것 Whay

+2

Brilliant thanks! 이것은 아마도 데이터에 시작 및 끝 수직 파이프가있는 이유 일 것입니다. – Adam

2

좋아하는 정규 표현식 펜던트가있다 :

0

Where concat('|',responsible,'|') like '%|5|%' 
+0

열이 이미 파이프로 시작하고 끝나야합니까? 좋아, 신경 쓰지 마라. –