where 뒤에 case문 ? 0 3 742

by 김성수 [2016.08.02 13:19:16]


where 뒤에

case 문을 넣었습니다..

맞는 문장인지 궁금합니다..

SELECT
 YMTH
,NUMB
,ENDX
,ENDX
,BALE           
FROM
 FS_DPCTXM                         
WHERE
STDS_YMTH = case  when SUBSTR( '201608', 1, 4) <= '2014' then  SUBSTR('201608', 1, 4) -1 || '12'
when SUBSTR( '201608', 1, 4) > '2014' then  TO_CHAR(TO_DATE(SUBSTR('201608', 1, 6), 'YYYYMM') -1, 'YYYYMM')       
END

이렇게 써도 무방한지 궁금합니다.

감사합니다.

by 박영식 [2016.08.02 13:27:25]
SELECT YMTH
      ,NUMB
      ,ENDX
      ,ENDX
      ,BALE           
  FROM FS_DPCTXM                         
 WHERE STDS_YMTH = CASE WHEN SUBSTR( '201608', 1, 4) <= '2014' THEN  SUBSTR('201608', 1, 4) -1 || '12'
                                                        WHEN SUBSTR( '201608', 1, 4) > '2014'  THEN  TO_CHAR(TO_DATE(SUBSTR('201608', 1, 6), 'YYYYMM') -1, 'YYYYMM')       
                                                END

문법적으로는 써도 무방할겁니다~


by 마농 [2016.08.02 15:28:50]

문법상 문제는 없는지?
의미상 문제는 없는지?
구문을 좀더 간결하게 개선할 수는 없는지?
등등을 확인하시면 됩니다.


입력값이
 - 2014년 까지는 전년도 12월
 - 2015년 부터는 전월
의미상 이게 맞나요?

SELECT *
  FROM fs_dpctxm
 WHERE stds_ymth = CASE WHEN :v_yyyymm < '2015'
                        THEN TO_CHAR(TRUNC(TO_DATE(:v_yyyymm, 'yyyymm'), 'yy')-1, 'yyyymm')
                        ELSE TO_CHAR(TO_DATE(:v_yyyymm, 'yyyymm')-1, 'yyyymm')
                    END
;

 


by 김성수 [2016.08.03 10:45:26]

맞습니다..감사합니다.

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