2010-02-02 1 views
7

을 "WHERE IN SELECT"에서 사용하는 어떻게 든 IN 블록에서 볼 수있는 값이됩니다.) :MySQL의 분할 내가 날이 회전 할 수 있도록 뭔가를 찾는 희망의 다양한 MySQL의 사이트를 수색 봤는데 문

SELECT * FROM mytable WHERE parametertype IN('a', 'b', 'c', 'd'); 

그러나 나는 큰 성공을 거두지 못하고 있습니다! 내가 찾은 최고의 사이트는 : , 어떤 답변을 발견하지 않았지만 구분 기호 (내 경우에는)를 기반으로 문자열의 분할을 설명합니다 ...

아무도 알고 있나요 이 컨텍스트에서 사용할 수있는 문자열 그룹으로 쉼표로 분리 된 문자열을 분할하는 좋은 방법은 무엇입니까?

+0

mysql 또는 C#을 사용하여 문자열을 분할하고 싶습니까? – tga

+0

안녕하세요 TGadfly, IN '('a ','b ','c ')를 사용하려면 C#의 SQL에'a ','b ','c ' 잔디의 법칙)은 효과가 없습니다! 귀하의 서신을 보내 주셔서 감사합니다! –

답변

6

을 위와 같이 STMP에 예를 들어 CONCAT 기능 를 사용하여 다음 실행 그것은 당신이 필요로하는 모든 유연성이 없을 수 있지만, MySQL의 FIND_IN_SET 기능은 suffic 수 있습니다 ient. 비교할 집합에 최대 64 개 값의 하드 제한이 있습니다. 예를 들어

- 열거의 정렬의

SELECT * 
FROM mytable 
WHERE FIND_IN_SET(parametertype, 'a,b,c,d') != 0 

이것은 인라인 SET MySQL을 사용 ("A, B, C, D ')의 예이다. 일 수 있습니다. 데이터 모델을 정규화하면 문제가 있다는 신호가됩니다. 그러나 조인을 제거하거나 (이 경우) 데이터베이스 외부에있는 복잡한 정보와 연관시키는 것이 편리 할 수 ​​있습니다.

+0

최고 답변 Martin! 나는 WHERE 절을 적용하고 왜 제대로 작동하지 않는지를 알아내어 제대로 혼란에 빠지려고 노력하고있었습니다! 고마워요! –

0

당신은 당신이 'A' '매개 변수로 전달 된 문자열로 가입 당신이 SQL 쿼리

SELECT * FROM mytable WHERE parametertype IN(
의 일부가이

처럼 뭔가를해야 동적 SQL


delimiter //; 
create procedure tst() 
begin 
prepare stmp from 'INSERT INTO LOGG SELECT PFILE_Filename FROM PFILE_FILE'; 
execute stmp; 
deallocate prepare stmp; 
end// 
delimiter ;// 

을 사용할 수 있습니다 , 'B', 'C', 'D' "STMP

+0

TGadfly,이 PFILE은 무엇입니까? 너를 괴롭히는 것에 미안해! –

+0

IT는 단지 문자열을 SQL로 실행하는 것입니다 문자열 'a', 'b'를 매개 변수로 전달하면 mysql이이를 문자열로 인식하지만 다른 문자열 끝에이를 결합하면 문자열이 동적으로 생성 될 수 있습니다. then execute your_string_name을 호출하면 매개 변수 배열로 인식됩니다. – tga

+0

SQL-Injection을 열어 두지 않습니까? –