replace로 where조건 검색시 차이 0 1 1,695

by 잔든건 [SQLServer] [2016.07.26 17:20:48]


 

REPLACE( '0160,0161', ',' , ''',''')

('0160','0161')로

 

where in절에서 검색할때 차이가 발생하는데  (replace로 바꾼경우는 안나옴 데이터가)

이유가 있나요??ㅜㅜ 부득이하게 replace를 사용해야하는데  

검색이 안되네요  변형된 모양은 같은데요..

 

+  REPLACE(REPLACE( '$0160,0161$', ',' , ''','''),'$','''')  이런식으로해서 변경해봐도 적용이 안됩니다..

by 마농 [2016.07.26 17:46:17]

Replace 등의 함수로 값을 변경할 수는 있어도, 값을 두개로 쪼갤수는 없습니다.
값에 컴마를 붙이고 따옴표를 붙인다고 해서 값이 쪼개지는게 아닙니다.
단지 컴마와 따옴표를 포함하고 있는 하나의 긴 문자열 값일 뿐입니다.
 

-- 1. IN 검색이 아닌 문자열 검색으로 바꾸기
 WHERE :v_txt LIKE '%'|| col ||'%'
 WHERE INSTR(:v_txt, col) > 0

-- 2. 값을 쪼개어 조건 주기
 WHERE col IN (SELECT REGEXP_COUNT(v, '[^,]+', 1, LEVEL) x
                 FROM (SELECT :v_txt v FROM dual)
                CONNECT BY LEVEL <= REGEXP_COUNT(v, '[^,]+')
               )

-- 3. 동적 쿼리 만들기
  v_txt = "'0160','0161'";
  v_sql = v_sql + " WHERE col IN (" + v_txt + ")";

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입