개발 일상(Dev)

[Oracle] Where 절에서 CASE.. WHEN.. THEN 사용하기

Roovelo 2022. 9. 27. 16:44
Where 절 안에서의 CASE… WHEN… THEN … 사용하기
 
where 절 안에서 case를 사용하고 싶은데 검색해봤는데 
1. SELECT 안에서의 CASE 사용
2. WHERE 절에서 사용은 하는데 () = 1 을 사용하는 방법 
 
그래서 그냥 일단 두드려서 만들어 봤는데 되길래 적어둡니다.
 
준비 
영업일이 들어있는 테이블이 있습니다. 
WORK_TABLE 이라고 하고 
WORK_DD 컬럼에 연,월,일이 ‘20220926형태로 들어있습니다. 
 
조건
09시 이전에는 오늘 이전의 영업일을 출력하고 싶고 
09시 이후에는 오늘 영업일을 출력하고 싶습니다. 
 

 

기존에는 그냥 오늘 기준 가장 최근 영업일을 가져오는 쿼리였어서 아래와 같은 형태였습니다. 
 
SELECT 
 WORK_DD
FROM WORK_TABLE
WHERE WORK_DD <= TO_CHAR(SYSDATE, ‘YYYYMMDD’)
AND ROWNUM = 1
이렇게 조회를 하면 오늘 포함 가장 최근 날짜를 구할 수 있었는데요. 
이 쿼리를 서브 쿼리로 써보니 역순으로 정렬이 되서 가장 예전 날짜가 선택되는걸 보면 MAX(WORK_DD)를 해주는게 제일 정확한 방법인 것 같긴합니다.
 
어쨌든 저는 여기서 WORK_DD는 하나만 SELECT 하고 싶은데  09시 이전과 09시 이후에 WHERE 절에 조건을 다르게 주고 싶은거였거든요. 
 
SELECT 
 MAX(WORK_DD)
FROM WORK_TABLE
WHERE WORK_DD <=
              ( CASE WHEN TO_CHAR(SYSDATE, ‘HH24’) >= ‘09’ THEN TO_CHAR(SYSDATE, ‘YYYYMMDD’)
                 ELSE TO_CHAR(SYSDATE-1, ‘YYYYMMDD’
                  END
              )
AND ROWNUM = 1
이렇게 하니까 WHERE 절 안에서 CASE를 쓸 수 있었습니다. 
 
그런데 이게 제대로 된 방법이 맞는지 아닌지를 잘 모르겠습니다.만 일단 작동은 잘 하고 있는 것 같습니다.
728x90