본문 바로가기

오라클

오라클 CASE ~ END : 조건에 따라 실행을 다르게 하는 조건문

-- CASE - END : 조건에 따라 실행을 달리 함


--금액별 세금 매기기

SELECT name, basicpay, sudang,

    CASE

        WHEN basicpay + sudang >= 3000000 THEN 0.03 --기본급과 수당의 합이 3백만원이 넘으면 3%를

        WHEN basicpay + sudang >= 2000000 THEN 0.02 --2백만원이 넘으면 2%를

        ELSE 0.01                                                      --그 외에는 모두 1%를 부과한다

    END  * (basicpay + sudang) 세금                         -- 각 조건에 해당하는 수치를 END에 적용시킨다. 여기서 수식이 없었다면 0.03과 같이 그냥 찍힘.

FROM insa;


-- 주의 시작과 끝

SELECT SYSDATE,

CASE

        WHEN TO_CHAR(SYSDATE, 'DAY') = '일요일' 

  THEN SYSDATE                                 -- WHEN 오늘이 일요일이면 THEN 그대로 찍고 아니면 ELSE 지나간 최근 일요일 계산해서 찍어라.

        ELSE NEXT_DAY(SYSDATE, 1) - 7       -- NEXT_DAY(SYSDATE,1) 가 명시된 요일인 일요일이 돌아오는 날을 계산함. 여기서 7일을 뺴주면 지나간 최근 일요일이 찍힌다.                                      

        END 주시작,

    CASE

        WHEN TO_CHAR(SYSDATE,'DAY') = '토요일' 

  THEN SYSDATE

        ELSE NEXT_DAY(SYSDATE, 7)

        END 주끝

FROM DUAL;


-- name, ssn, 성별(주민번호기준) 출력

SELECT name, ssn,

  CASE 

   WHEN SUBSTR(ssn, 8, 1) IN (1,3,5) 

   THEN '남자'

   WHEN  SUBSTR(ssn, 8, 1) IN (2,4,6) -- 조건문으로 비교하면 무조건 WHEN으로 써야한다 (ELSE는 조건문도 THEN도 올 수 없다.) 위 예제 ELSE는 수식이다.

   THEN '여자'

   END 성별

FROM insa;

--  WHEN SUBSTR(ssn,8,1) =2 OR SUBSTR(ssn,8,1)=3 THEN'남자' -- CASE 문장을 쓰지않고 이조건문을 사용해도 된다.

'오라클' 카테고리의 다른 글

오라클 ORDER BY : 정렬  (0) 2013.05.30
오라클 NULL : 값이 존재하지 않는 상태  (0) 2013.05.30
오라클 날짜 표현  (0) 2013.05.30
3.변환,절삭,나머지,반올림  (0) 2013.05.29
2.스칼라 함수 (단일행)  (0) 2013.05.29