2015-02-04 5 views
0

테이블 필드 유형 문자열은 쉼표로 구분 된 int 값을 포함 할 수 있습니다. "1,6,2,13"또는 "3,9,2"또는 "1,3"필드에 mysql의 특정 값이 포함되어 있는지 확인하는 방법은 무엇입니까?

예를 들어. "3"은 "13"을 얻지 못했습니까?

select * from table where field like '%3%'은이 경우 작동하지 않습니다. 도 아니요 like '%,3,%

현재 '3, %', '% 3, %', '% 3'%의 조합을 시도하고 있습니다. 더 쉬운 방법이 있는지 궁금합니다.

+0

의 중복 가능성이 [테이블의 행을받는 방법 열이 일부 value.?](http://stackoverflow.com/questions/28297830/how-to-get-을 포함하는 10와 같은 정규 표현식을 사용해보십시오 어떤 테이블의 행 - 열 - 포함 - 일부 값) – Jens

+1

csv로 값을 저장하는 것은 매우 나쁜 데이터베이스 디자인입니다. – Jens

답변

1

LIKE 정확한 검색을

SELECT * FROM table WHERE 
    field REGEXP '[[<:]]3[[:>]]' 

를 얻을 수 REGEX를 사용하여, 정확한 검색을위한보다 나은 작동하지 않습니다 또는

SELECT * FROM tblname WHERE 
    FIND_IN_SET('3', field) > 0 

주 또한 FIND_IN_SET() 기능을 사용할 수 있습니다 : FIND_IN_SET() 기능이 작동하지 않습니다 대칭이 아닌 태그가 쉼표로 구분 된 경우 태그 사이에 공백이 있으면 문제가 발생합니다.

+0

나는 정규 표현식의 팬이 아니며 때때로 느려질 수있다. 그러나 나는 FIND_IN_SET 함수를 좋아하는데,이 함수는 나를 알지 못했다. – Klaus

+0

'find_in_set()'함수에 대한 자세한 내용보기 http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set – Girish

0
SELECT * 
FROM table 
WHERE field REGEXP '^3,|,3,|,3$'; 
관련 문제