by 까막 [SQL Query] ORA-01839 Oracle [2020.02.24 11:39:29]
안녕하세요~
날짜(DATE)필드에 2020년1월1일~2020년1월31일 데이터가 담겨있습니다.
해당 데이터는 매달 앞에 년월만 당월로 바꿔주는 작업을 배치로 진행중에 있습니다.
update table set 날짜=TO_DATE(TO_CHAR(SYSDATE, 'YYYYMM') || TO_CHAR(날짜, 'DDHH24MISS'), 'YYYYMMDDHH24MISS')
그런데 문제는 2월의경우는 29일, 30일 등이 없기때문에
위의 쿼리를 사용하게되면 1월30일을 2월30일로 바꾸는 과정에서 아래와 같은 에러가 납니다.
ORA-01839: 지정된 월에 대한 날짜가 부적합합니다
update의 where 조건에 exists같은걸 추가해서
존재하지않는 일이면 업데이트를 하지 말아야할 것 같은데,,
어떤식으로 쿼리를 짜야할지 어렵습니다..
도움받고 싶어서 글을 작성하였습니다
답변감사합니다.
운영에서 사용되는것은아니고
테스트 데이터를 만들어놓았는데
몇달뒤, 또는 몇년뒤 해당 데이터를 조회하려면
테스트 데이터가 생성된 날짜를 선택해서 조회해야하는 불편함이 있어서
데이터를 매번 당월 기준으로 변경을 하려고 했었습니다.
그래서 미리 1일~31일까지 데이터를 생성해 놓고
년월만 변경하려고 했었습니다.
그런데 ADD_MONTHS 함수를 쓰려다보니까
1월31일 데이터를 ADD_MONTHS로 하면 2월31이 생기는게 아니고
2월 28일로 데이터가 업데이트 되는 현상을 발견했습니다.
(당연한 얘기인듯하지만 테스트데이터를 만들어놓은 31일 데이터가 유실되는 현상)
그래서 ADD_MONTHS를 사용하지 않고 다른방법을 고민했었습니다.