후다다닥
371
2019-08-30 11:32:31
4
1588

WHERE 절에서 오라클 DECODE문 과 IS NULL 질문


안녕하세요. 제가 SQL문을 짜는데 햇갈리는 부분이 있어서 여쭤볼려고 글을 올립니다.

제가 특정 변수 한 숫자를 받고 그 변수 값에 따라 조건문을 다르게 하고 싶은데요

가령

:SEL이라는 변수 명이 있고 abc컬럼에 대해 조건을 걸고 싶다면

WHERE DECODE(:SEL , '1' , abc is null

                                        , '2' , abc is not null

                                        , '3' , abc like '%')

이런식으로 1일때는 abc가 null값만 조건 걸기 2일때는 abc가 not null값만 조건걸기 3일때는 abc가 전체 출력 형태로 출력하고 싶은데 어떻게 하면 좋을까요?

0
  • 답변 4

  • lovelin
    24
    2019-08-30 11:50:14

    순수SQL로만 한다면

    WHERE (

                      ( :SEL = '1' AND abc is null ) 

                    OR   ( :SEL = '2'  AND abc is not null )

                     OR (   :SEL =  '3' AND abc like '%' )

                   )

    정도가 아닐지요


  • 후다다닥
    371
    2019-08-30 12:24:31

    오우 감사합니다 생각보다 간단한거였네요 혹시 순수 sql이라하셧는데 다른방법이또있을까요?


  • 유리세계
    3k
    2019-08-30 13:48:29

    IBATIS나 MYBAITS의 조건절을 사용해서 하는 방법도 있겟죠

    <if test='sel == 1'>

     AND abc is null

    </if>


    아니면 ABC 컬럼에 값이 아닌 쿼리 그 자체를 찍어주는 방법도 있고요

    \\

  • jk.son
    14
    2019-08-30 14:29:52

    유리세계님이 말씀하신 방법은 추천하지 않습니다. 과도하게 사용될 경우 라이브러리캐시에 비슷한 쿼리가 다량 저장됨으로써 하드파싱하게 될 가능성이 높아집니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.