안녕하세요 테이블 컬럼이 날짜 데이터를 갖고있습니다.
2개의 컬럼중(둘다 날짜데이터) 첫번재 기준이 되는 컬럼이 널이아니라면 1번컬럼에서 검색
1번컬럼이 널이라면 2번컬럼에서 검색을 하고싶습니다.
그래서 구상해본 쿼리가.. 이하입니다.
select * from table a
where 1=1
and a.date1 = case when a.date1 not null then
a.date1 >= to_char(add_months(sysdate, -36), 'YYYYMMDD')
else
a.date2 >= to_char(add_months(sysdate, -36), 'YYYYMMDD')
end
이렇게 하면 될줄알았는데.. 문법에러가 나네요 case문은 이렇게 사용하지 못하는건가요?
제가 다른 쿼리를 구상해봤는데요~ 문제가 없는거 같아서 확인차 문의드립니다.
이하처럼 쿼리를 구상하면 될까요?
and (
(a.date1 is not null and (a.date1 >= to_char(add_months(sysdate, -36), 'YYYYMMDD') ) )
or
(a.date1 is null and (a.date2 >= to_char(add_months(sysdate, -36), 'YYYYMMDD') ) )
)
감사합니다.
WITH T AS (SELECT '20170101' DATE1, '20180201' DATE2 FROM DUAL UNION ALL SELECT NULL DATE1, '20170201' DATE2 FROM DUAL UNION ALL SELECT '20180101' DATE1, NULL DATE2 FROM DUAL) SELECT * FROM T WHERE 1=1 AND NVL(DATE1, DATE2) >= TO_CHAR(ADD_MONTHS(SYSDATE, -36), 'YYYYMMDD') -- AND CASE WHEN DATE1 IS NOT NULL THEN DATE1 ELSE DATE2 END >= TO_CHAR(ADD_MONTHS(SYSDATE, -36), 'YYYYMMDD')