본문 바로가기
DB/MySQL, Maria

MYSQL WHERE 구분자 치환(REPLACE)하여 in 사용

by -master 2020. 8. 7.



제목이 좀 헷갈리죠? 저도 쓰면서 어떤게 적당할지 아래처럼 고민하다가 그냥 저렇게 했습니다.


(1) where절에서 in 사용하는데 replace로 치환해서 검색

(2) in과 replace 동시에 쓰기 

혹은

(3) FIND_IN_SET 에서 replace 하기 등등


아무튼 제목은 넘어가고 본문으로 가겠습니다.




상황은 이렇습니다.

어떤 DB의 어떤 Table에 아래와같이 값이 있습니다.







(1)

즉 Names라는 컬럼에는 다수의 사람 이름을 '|' 라는 구분자를 통해 저장시키고 있는 상황이죠. 그리고 우리는 'AA'라는 사람이 포함되어있는 ROW를 추출해 내어야 합니다. 여기서 단순하게 생각해버리면 오류를 범할 수 있습니다.


select * from DB.TABLE where Names like '%AA%'


이렇게요. 나와선 안될 2번 row까지 같이 잡혀버리죠. '에이 누가 이렇게해~' 라고 하실 수 있지만 실제로 많이 발생하는 실수 유형입니다. 




(2)

그리고 구분자가 단순히 콤마(,) 였다면 in query를 통해 단순히 처리할 수 있었을겁니다. 아, 제목에서도 IN 이라고 했지만, 사실 이런상황에서는 FINID_IN_SET을 사용하는게 좋습니다. 아래처럼요.


select * from DB.TABLE where FIND_IN_SET( 'AA', Names )




(3)

하지만 오늘의 문제! 구분자가 콤마(,)가 아닌 경우를 만날 상황이 있겠죠!! 걱정마시고 FIND_IN_SET에 REPLACE를 섞어서 사용하시면 됩니다. 아래처럼요~!


select * from DB.TABLE where FIND_IN_SET( 'AA', REPLACE( Names, '|', ',' ) )



결과적으로 구분자를 '|' 에서 ',' 콤마로 변경 시켜 FIND_IN_SET이 동작하도록 한 것입니다. 겪고계신 문제가 해결되었으면 좋겠습니다~! 읽어주셔서 감사합니다!!





반응형

댓글