검색 조건을 동적으로 주고 싶은데 어떤 방법이 있을까요??(초보입니다) 0 6 910

by 타핑이 [SQL Query] [2014.09.26 00:50:36]


파라미터로 컬럼 이름(모두 검색할때는 all), 검색할 단어가 넘어와요

그래서 저는

select * from user where

(case when 컬럼이름 = 'id'

           then id like '%'||검색단어||'%'

         when 컬럼이름 = 'name'

           then name like '%'||검색단어||'%'

          when 컬럼이름 = 'all'

            then ((id like '%'||검색단어||'%') OR (name like '%'||검색단어||'%'))

      end);

 

이렇게 될것 같았는데 안되서

decode써서 안에 넣어도 봤는데 안되더라구요.....

처리할 방법이 없을까요??

by 비주류 [2014.09.26 09:08:19]

1. CASE WHEN 컬럼이름 = 'id' AND id LIKE '%'||검색단어||'%' THEN 1

            WHEN ... THEN 1

    END = 1

2. ((컬럼이름 = 'id' AND id LIKE '%'||검색단어||'%') OR 

    (...) OR

    (...))


by 타핑이 [2014.09.26 09:46:52]

감사합니다.


by 마농 [2014.09.26 09:08:30]
-- Then 절에 오는것은 하나의 "표현식"(값, 컬럼, 수식 등)이 와야 합니다.
-- "비교식"이 올 수는 없습니다.
SELECT *
  FROM user
 WHERE CASE WHEN :컬럼이름 = 'id'   THEN INSTR(id  , :검색단어)
            WHEN :컬럼이름 = 'name' THEN INSTR(name, :검색단어)
            WHEN :컬럼이름 = 'all'  THEN INSTR(id  , :검색단어) + INSTR(name, :검색단어)
        END > 0
;

 


by 타핑이 [2014.09.26 09:47:10]

감사합니다 INSTR의 기능이 이렇게 좋을줄 몰랐습니다 감탄...


by 타핑이 [2014.09.26 09:46:25]

두분다 정말 감사합니다. 이렇게 소스를 통채로 받을 의도는 아니었는데..=_=a

사실 저는 declare begin end 이런거 써야될줄 알고 검색해서 엄청난 참고자료들을 봤지만.... 기본이 안돼있으니 쓸 방법자체를 모르겠더라구요 ㅠㅠ

비주류님 when에서는 비교문을 써야되는게 아닌가요? and 로 like 검색을 했는데 굉장히 잘 동작하네요.. when 절에서는 true false를 반환하는 문장을 써야되는걸로만 기억을 하고 있었는데 신기합니다..

마농님 INSTR이 저는 index를 반환하는함수로 기억을 하고 있었는데 이것도 신기하네요 ㅠㅠ

마지막으로 두분다에게 궁금한게 END 에 비교식을 넣어두셨더라구요 END = 1 END > 0 이것 둘다 처음 보는건데 만약에 1이아니거나 0보다 크지 않으면 아무것도 반환하지 않는군요 하.....

이런저런 말이 길어졌는데 정말 감사합니다!!!


by 마농 [2014.09.26 10:26:24]

모든 구문들은 기본만 익히면 얼마든지 확장 및 중첩해서 사용 가능합니다.

when 절에는 조건식이 옵니다

조건식은 하나만 달랑 올 수 있는게 아니라 and 로 여러개 붙여 오는게 가능하구요.

Case 나 Decode 나 모두 하나의 값을 반환하는 함수입니다.

값은 얼마든지 Where 절에서 다른값과 비교도 가능하며

다시 다른 함수와 중첩해서 사용도 가능합니다.

기본은 충실하게 응용은 무한대로~

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